[英]SQL query with Left Join to return results when the top 1 column of joined table matches column of main table
我有一个主表 (TableA),我左连接 TableB,但我只想包含 TableB 的第一条记录,其中两个表的 ColumnB 匹配。 我已经让它在下面的查询中工作,除了我还需要包括 TableA 的记录,其中 TableB 不存在匹配的记录(即在下面的查询中 b.ColumnA 将为空)。 我明白为什么我在“OR b.ColumnA = null”下面的行不起作用,但我正在努力寻找一个解决方案。
任何合理的方法也包括 TableA 的记录,其中 TableB 中不存在匹配的记录
SELECT b.ColumnA, a.ColumnA, a.ColumnB
FROM TableA a
LEFT JOIN TableB b ON b.ColumnB = a.ColumnB
WHERE b.ColumnA = (SELECT TOP 1 bb.ColumnA FROM TableA aa LEFT JOIN TableB bb ON bb.ColumnB = a.ColumnB)
OR b.ColumnA = null
使用OUTER APPLY
:
SELECT b.ColumnA, a.ColumnA, a.ColumnB
FROM TableA a OUTER APPLY
(SELECT TOP (1) b.*
FROM TableB b
WHERE b.ColumnB = a.ColumnB
ORDER BY ? -- however you are defining the ordering for "first"
) b;
如果您对b
的任意匹配记录ORDER BY
满意,则可以省略ORDER BY
。 但是,问题指定了“第一”而没有定义它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.