Выберите оператор, но таблица является подзапросом? - PullRequest
0 голосов
/ 02 сентября 2018

Я разделяю своих пользователей по ролям, поэтому базовая таблица users содержит очень мало информации, остальное в отдельных таблицах, где хранится информация, относящаяся к роли.

Итак, я хочу сделать оператор SELECT в SQL, но таблица, которую я выбираю, должна быть значением подзапроса.

SELECT * FROM (subquery);

В этом случае подзапрос - это значение из роли users в таблице users, поэтому я знаю, где искать остальную информацию.

SELECT role FROM users WHERE email = 'jhondoe@example.com';

Все вместе:

SELECT * FROM (SELECT role FROM users WHERE email = 'jhondoe@example.com');

(Теоретически) Это могло бы привести к следующему:

SELECT * FROM students;
SELECT * FROM parents;
SELECT * FROM teachers;

В зависимости от электронной почты;

1 Ответ

0 голосов
/ 02 сентября 2018

Вы можете объединить ваш запрос в переменную и затем выполнить его с помощью функции EXEC:

declare @query nvarchar(MAX);
SET @query = 'SELECT * FROM ' + (SELECT role FROM users WHERE email = 'jhondoe@example.com');
EXEC(@query)

Или, если все ваши таблицы имеют одинаковую структуру, вы можете объединить их и выбрать записи, которые соответствуют правильной роли:

SELECT * FROM

(SELECT *, 'students' as PersonRole FROM students
UNION ALL
SELECT *, 'parents' as PersonRole FROM parents
UNION ALL
SELECT *, 'teachers' as PersonRole FROM teachers)

as tMerged

WHERE PersonRole IN (SELECT role FROM users WHERE email = 'jhondoe@example.com')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...