【问题标题】:Select statement, but table is a subquery?选择语句,但表是子查询?
【发布时间】:2019-02-07 11:35:32
【问题描述】:

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

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

SELECT * FROM (subquery);

在这种情况下,子查询是用户表中用户角色的值,所以我知道在哪里查找其余信息。

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;

取决于电子邮件;

【问题讨论】:

  • 我认为您需要另一个子查询来将所有用户分组到一个表中。
  • 不知道为什么它必须是子查询的值而不是连接的值。但是要让问题中的 sql 正常工作,您需要为子查询设置别名 - 例如将 as students 放在右括号之后的末尾。但是显示您的架构和示例数据以及预期结果以获得正确的解决方案
  • 您需要使用动态 SQL。这通常表明数据模型可以改进。

标签: sql database subquery


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多