【问题标题】:Return multiple rows with subquery in SQL select clause在 SQL 选择子句中使用子查询返回多行
【发布时间】:2021-07-23 07:11:24
【问题描述】:

当您的子查询没有连接/键字段时,有没有办法在 SQL 选择子句中返回多行?我的查询目前看起来像这样。当用户和合同之间没有密钥时,我想返回用户列表和合同列表。

有少数用户,但有很多合同,我想在每个用户 ID 旁边生成每个合同 ID 的列表。

select 
userid,
(select contractid from contracts) as contractid
from users

这里是新的,但是交叉连接的建议符合我的要求。谢谢!

【问题讨论】:

  • 如果你想把合约和用户关联起来,你必须有一个join字段。另一方面,如果您只需要用户 ID 和合同 ID 的列表,则可以使用 UNION ALL 关键字。
  • 进行交叉连接。
  • "有没有办法在标量子查询中返回多行?" -- 不,但您可以使用其他策略来获得您想要的结果。
  • 使用 str_agg 函数docs.microsoft.com/en-us/sql/t-sql/functions/… 编辑:没关系,重新阅读您的问题后,我认为我的想法有误,但我会在此处留下评论以防万一。

标签: sql-server tsql


【解决方案1】:

您可以通过执行CROSS JOIN 来生成usersconstracts 的所有可能组合。例如:

select 
  u.*,
  c.*
from users u
cross join contracts c

然后,您可以根据需要通过附加 WHERE <condition> 来过滤结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多