MSSQL 2012 - 在子查询中返回多个列
Posted
技术标签:
【中文标题】MSSQL 2012 - 在子查询中返回多个列【英文标题】:MSSQL 2012 - Returning multiple columns in a subquery 【发布时间】:2013-07-03 07:17:02 【问题描述】:我想用子查询返回多个列。
E.G,
select a.name, a.age
from table1 a, ( select b.race, b.weight from table2 b where dateDiff(dd, b.date1, b.date2 ) < 30 )
where a.age > 24
你们中的一些人说过“只需使用联接”- 我不希望子查询中的 dateDiff 影响父查询的结果。同样,我的真实查询比这个更复杂,但这应该足以解释我的问题。
【问题讨论】:
那么你为什么不使用连接来获得所需的结果呢? 使用联接而不是子查询 请提供有关您的子查询的更多详细信息,以便我们了解您为什么不使用 LEFT JOIN。在当前的例子中,Hip Hip Array 给出的答案是正确的。 @Treb 我刚刚更新了。希望这有助于解释。我不希望我的子查询中的 dateDiff 子句影响父结果。是否可以在左连接中做到这一点? 只需将 dateDiff() 条件放入LEFT JOIN
条件中即可。
【参考方案1】:
使用左连接来做到这一点,左连接将返回NULL值
SELECT a.name, b.score, ...
FROM (select id, name, ... from table1 where ???) a
LEFT JOIN (select id, score, ... from table2 where ???) b on (a.id = b.id)
WHERE clause
【讨论】:
我可能没有很好地解释我的问题 - 但在这种情况下我不能使用连接。因为我的子查询中有几个条件,我不想影响我的父结果。 @JasonWells - 您可能应该发布您的实际查询,而不是提出一个简单的查询并要求答案。 @JasonWells:你仍然可以加入 select 语句,检查我的编辑以上是关于MSSQL 2012 - 在子查询中返回多个列的主要内容,如果未能解决你的问题,请参考以下文章
为啥mssql的OPENQUERY取oracle某表时只返回了一行数据,而在pl/sql中可以查到表中有两行数据,求解答?