繁体   English   中英

当连接表的前 1 列与主表的列匹配时,使用 Left Join 的 SQL 查询返回结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM