Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将select语句的结果用作另一个select语句的列?_Sql_Sql Server_Tsql_Select - Fatal编程技术网

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

Sql 如何将select语句的结果用作另一个select语句的列?,sql,sql-server,tsql,select,Sql,Sql Server,Tsql,Select,如何将SQL select语句的结果用作另一个SQL select语句的列 例如: SELECT s.name, (SELECT COUNT(*) FROM product as p WHERE p.store_id=s.id) FROM store as s 如果其他_表的结果是一条记录,则没有问题。但是,如果它有多条记录,它将失败。不,您不能像这样使用子查询,因为在子查询中,您将获得一个值,并且不能在sql查询中选择一个值。只能选择表的列名。因此,编写子查询的格式完全错误。您

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

例如:

SELECT s.name,
       (SELECT COUNT(*) FROM product as p WHERE p.store_id=s.id)
FROM store as s

如果其他_表的结果是一条记录,则没有问题。但是,如果它有多条记录,它将失败。

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

您可以这样使用:

select a, b, c.t
from my_table
cross apply (select t from other_table where other_table.id = my_table.a) as c

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

SELECT s.name,
       (SELECT COUNT(*) FROM product as p WHERE p.store_id=s.id)
FROM store as s
在这种情况下,始终只返回一条记录,查询将正常工作。请注意,这只是一个示例,您应该在这里使用联接而不是子查询

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

select a, b,
    (select TOP 1 t from other_table where other_table.id = my_table.a) as c
   from my_table

为什么不在另一个_table.id=my_table.a上连接两个表呢?我想我应该使用光标或其他东西。@Jayvee外部表也可能有Where子句nx,但是正如我所说的,如果子查询对于主查询的每一行只有一条记录,它就可以工作了。我对这个查询做了一些修改,现在它可以工作了:SELECT id,选择points from points where points.serial=table1.serial作为spoint,table1I中的一些其他字段将返回一些记录,直到到达表中有多条记录的序列points@Shivam:拉赫马尼是对的。查询语法正确,并且在子查询返回多条记录之前一直有效。