我在做一个系统,我在一个查询中加入了几个表。 在大多数情况下,以下类型的查询都可以解决问题:
SELECT * FROM A JOIN B ON A.a = B.a JOIN C ON C.a = A.a WHERE A.a = 123;
属性A.a是PK,在B.a和C.a中用作FK。
在某些情况下,没有相应的B.a和C.a.在其他人中,只有C.a失踪了。 就像现在一样,如果B或C中没有对应的键,我得到一个空集。正如所料。
如果仅存在A,则生成仅具有A属性的集合的查询将是方便的,如果A.a = B.a等,则添加B和C属性。
我想这需要一个DBMS特定的解决方案,而不是一般的SQL,但我不确定。
如果可能,应该如何做到这一点?
答案 0 :(得分:1)
你想要这个:
SELECT *
FROM A LEFT OUTER JOIN
B
ON A.a = B.a LEFT OUTER JOIN
C
ON C.a = A.a
WHERE A.a = 123
left outer join
保留第一个表中的所有记录(“左侧”中的记录)和右侧的任何匹配表。您可以在任何表中引用列。如果没有匹配,则该值为NULL。
答案 1 :(得分:1)
这种连接称为outer(与默认的连接类型相反,称为 inner )。
以下是告诉SQL您需要外连接的方法:
SELECT * FROM A
LEFT OUTER JOIN B ON A.a = B.a
LEFT OUTER JOIN C ON C.a = A.a WHERE A.a = 123;
这告诉SQL即使缺少B
或C
(或两者)的相应行,您仍然需要任何可用的行。