0

我正在做一个系统,我在一个查询中加入几个表。在大多数情况下,以下类型的查询可以解决问题:

     SELECT * FROM A JOIN B ON A.a = B.a JOIN C ON C.a = A.a WHERE A.a = 123;  

属性 Aa 是 PK,在 Ba 和 Ca 中用作 FK

在某些情况下,没有相应的 Ba 和 Ca 在其他情况下,只是缺少 Ca。就像现在一样,如果 B 或 CI 中没有相应的键,则得到一个空集。正如预期的那样。

如果只存在 A 并且如果 Aa = Ba 等时添加 B 和 C 属性,则查询会很方便地生成一个仅包含 A 属性的集合。

我想这需要一个特定于 DBMS 的解决方案,而不是一般的 SQL,但我不确定。

如果可能的话,有什么想法应该怎么做?

4

2 回答 2

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。

于 2012-12-17T21:35:41.800 回答
1

这种连接称为外部连接(与默认连接类型相反,称为内部连接)。

下面是告诉 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,即使缺少相应的BC(或两者)行,您仍然需要任何可用的行。

于 2012-12-17T21:35:53.633 回答