我有表格(列)A(a)
和B(b, a)
. 字段a
是primary in A
,b
是primary in B
。A
表示一组类,B
表示一组元素,每个元素都是一个类的一部分。任务是检索所有类 ( A.a
) 是第一列,这些类的元素在第二列。如果某个类不包含元素,则应在第二列中使用 null 检索它。
正确的查询是:
select A.a, B.b from A left join B on A.a = B.a
这正是我需要的。但是,在阅读了左连接的文档后,我尝试使用查询手动重复此结果:
select B.a, B.b as "b" from B
union
select A.a, null as "b" from A
where A.a not in (select B.a from B)
第一行选择我需要的所有对,第 3-4 行专门选择那些未在表中显示B
且第二列为空的类。这两个查询返回不同的行数,我不明白为什么。有人可以解释一下吗?是我对左加入行为的理解还是其他什么?(不幸的是,我对执行它的服务器没有太多访问权限,我可能只能看到返回的行数。)