我正在做一个系统,在查询中连接多个表。 在大多数情况下,以下类型的查询可以解决问题:
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,但我不确定。
如果可能的话,有什么想法应该如何完成吗?
最佳答案
你想要这个:
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
左外连接保留第一个表(“左边”的表)和右边所有匹配表中的所有记录。您可以引用任何表中的列。如果没有匹配,则值为 NULL。
关于mysql - 构造一个既可以使用特定表也可以不使用特定表的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13922516/