选择语句,但表是子查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择语句,但表是子查询?相关的知识,希望对你有一定的参考价值。

我按角色分隔用户,因此基本用户表的信息非常少,其余的则在存储角色特定信息的独立表中。

所以我想在SQL中执行SELECT语句,但是我选择的表必须是子查询的值。

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;

取决于电子邮件;

答案

您可以将查询连接到变量中,然后使用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')

以上是关于选择语句,但表是子查询?的主要内容,如果未能解决你的问题,请参考以下文章

什么是子查询

为啥 dapper 在进行选择时为 Guid 返回全零但表中的 guid 值设置正确?

MySQL—— 子查询

MySQL的SQL语句 - 数据操作语句(13)- 子查询

查询: 在邮递员的 whereHas 处返回,但表中有数据。拉拉维尔

BigQuery:TABLE_QUERY,但表之间的列不同