如何将选择语句的结果用作另一个选择语句的列?

Rah*_*ani 6 sql t-sql sql-server select

如何将一个SQL select语句的结果用作另一个SQL select语句的列?

例如:

select a, b,
    (select t from other_table where other_table.id = my_table.a) as c
from my_table
Run Code Online (Sandbox Code Playgroud)

如果结果other_table为一个记录,则没有问题。但是,如果它有多个记录,它将失败。

got*_*tqn 5

您可以像这样使用CROSS APPLY

select a, b, c.t
from my_table
cross apply (select t from other_table where other_table.id = my_table.a) as c
Run Code Online (Sandbox Code Playgroud)


Jen*_*lly 5

我通常在计数时只使用这种查询。例如:

SELECT s.name,
       (SELECT COUNT(*) FROM product as p WHERE p.store_id=s.id)
FROM store as s
Run Code Online (Sandbox Code Playgroud)

在这种情况下,总是只返回一条记录,查询将起作用。请注意,这仅是示例,您应在此处使用联接而不是子查询。

在您的情况下,您可以使用TOP关键字将子查询中的记录数限制为一个:

select a, b,
    (select TOP 1 t from other_table where other_table.id = my_table.a) as c
   from my_table
Run Code Online (Sandbox Code Playgroud)


Shi*_*vam -1

不,你不能像这样使用子查询,因为在子查询中你将得到一个值,并且你不能在sql查询中选择一个值。您只能选择表的列名。所以这完全是编写子查询的错误格式。

  • @Shivam:拉赫马尼是对的。查询语法是正确的,并且在子查询返回多条记录之前一直有效。 (2认同)