我正在尝试从表中进行选择,我的问题是此表中的某些列(外键)可以为null。
这些外键中的2个是独占的,如果其中一个具有数据,则另一个将为空,反之亦然。因此,当我尝试编写where
子句时,其中一个将始终为null,并且我无法检索任何数据。
示例:
Select
t1.col1, t1.col2, t1.pk1, t2.col3, t2.col4, t2.pk2, t3.col5, t3.pk3
from
t1, t2, t3
where
t2.pk2 = t1.pk2
and t3.pk3 = t1.pk3
其中一个子句将始终为false,因为其中一个列在table1上始终为null。我理想的解决方案是在表1的值为null的情况下使特定的where子句被忽略,但我不知道该怎么做。
提前致谢。
答案 0 :(得分:4)
改为使用LEFT JOIN
:
Select t1.col1, t1.col2, t1.pk1,
t2.col3, t2.col4, t2.pk2,
t3.col5, t3.pk3
From t1
Left Join t2 On t2.pk2 = t1.pk2
Left Join t3 On t3.pk3 = t1.pk3
通过使用INNER JOIN
,您可以过滤不满足所有JOIN
条件的记录。 OUTER JOIN
将为外表返回NULL
值(在LEFT JOIN
的情况下,右边的表),其中JOIN
条件不满足。< / p>
作为旁注,您应该从不在FROM
子句中使用逗号。旧的隐式JOIN
语法已弃用over 25 years ago!