表A结构:
表B结构:
上面是两个表,TableB.TableARelationID是一个relationID,用于映射表A。
期望的输出:
期望的结果将采用 TableA.RecordID 和 TableB.Text,但仅采用表 B 中的类型 2,即忽略类型 1
下面是我使用的 SQL 查询:
SELECT tablea.recordid,
tableb.text
FROM tablea
LEFT JOIN tableb
ON tablea.relationid = tableb.tablearelationid
WHERE type = 2
但上面的查询会输出:
即 RecordID 1 丢失,因为“where”子句被过滤。
那么如何显示表 A 中的 RecordID 1 呢?
您需要移动type = 2
过滤到连接条件:
SELECT TableA.RecordID, TableB.Text
FROM TableA
LEFT JOIN TableB
ON TableA.RelationID = TableB.TableARelationID
AND TableB.Type = 2;
考虑这样的结果:
SELECT TableA.RecordID, TableB.Text, TableB.Type
FROM TableA
LEFT JOIN TableB
ON TableA.RelationID = TableB.TableARelationID;
你会得到
RecordID | Text | Type
1 | NULL | NULL
2 | B | 2
3 | C | 2
4 | D | 2
然后您要过滤类型列,因此对于 recordID = 1 您有NULL = 2
这是假的(它实际上不是假的,它是空的,但它不是真的),所以这条记录从最终结果中被剔除。
每当您离开联接时,您都必须在联接条件而不是位置中应用您希望应用于左表的任何过滤条件,否则您实际上将其转换为内部联接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)