sql - 如何在 select 语句中添加从 select 语句派生的列?

标签 sql sql-server select insert

使用 SQL Server 2008

目标:从 table1 中选择一系列列插入到 table2

问题:在表 2 中需要插入一个附加列,该列可以从表 1 和表 3 之间的联接派生

当前代码

SELECT
    table1.name,
    table1.email,
    table1.phone,
    CASE WHEN table1.status = 'active' THEN 1 ELSE 0 END AS Active,
    CASE WHEN table1.group_id = 3 THEN 5 ELSE table1.group_id END AS RoleId,
    (SELECT
        table3.UserID AS ParentID
     FROM
         table3
     INNER JOIN
         table1 ON
         table3.ID = table1.table3_ID)
FROM
    table1
WHERE
    table1.group_id = 3 AND
    table1.status = 'active'

目前此代码不起作用并返回“子查询返回超过 1 个值”错误。 我知道这可能不是使用嵌套选择的正确方法,正确的方法是什么?

如有必要,可以提供其他数据。 先感谢您。

最佳答案

问题是您需要一个相关子查询。这意味着您需要从子查询中删除 table1:

SELECT table1.name, table1.email, table1.phone,
       (CASE WHEN table1.status = 'active' THEN 1 ELSE 0 END) AS Active,
       (CASE WHEN table1.group_id = 3 THEN 5 ELSE table1.group_id END) AS RoleId,
       (SELECT table3.UserID 
        FROM table3
        WHERE table3.ID = table1.table3_ID
       ) as ParentID
FROM table1
WHERE table1.group_id = 3 AND table1.status = 'active';

如果 table3 中有多个可能的匹配项,那么您将需要类似 select top 1 table3.UserIdselect max(table3.UserId )

关于sql - 如何在 select 语句中添加从 select 语句派生的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771709/

相关文章:

mysql - SQL 中的自然排序不起作用

mysql - LEFT OUTER JOIN 仅最新记录

html - HTML选择上的水平滚动?

python - 从 pandas 的一系列中选择值

php - 更新 SQL 表将 varchar 转换为 int

c# - 随机 SQL 连接问题。工作,然后不工作,然后工作,然后 BAM!永远不会再工作?

java - 如何告诉 oracle 按从 java 传入的特定排序顺序进行排序?

sql - 如何在一次查询执行中创建 View 并从中选择

sql-server - 为什么我的主键会减慢我的查询速度?

sql-server - SQL Server Openjson 将详细信息提取到表中