加入两个表,但并非所有键都可用

时间:2018-04-16 11:39:46

标签: sql

我无法找到解决方案。也许还因为它有点难以解释。

我用key1获得了table1。 我用key2得到了table2,value1。

我的陈述:

Select * From table1 As t1
Left Join table2 As t2 On t2.key2 = t1.key1
Where t2.value1 Is Null Or t2.value1 > 123;

现在我在table1中有一些key1,但在table2中没有相应的key2。因为我在结果中没有那些键,但我需要它们。如果键不在table2中,则value1遗憾地不为null。我可以在那里查看一些“价值”吗?

2 个答案:

答案 0 :(得分:2)

通常情况下,left join上的条件会出现在on子句中。

我怀疑你想要:

Select *
From table1 t1 Left Join
     table2 t2
     On t2.key2 = t1.key1 and t2.value1 > 123;

这将从t1返回table2的所有行以及匹配的行(如果有的话)。

您的版本将返回table1的所有行,其中有匹配的行value1 > 123或根本没有匹配的行。换句话说,它会过滤掉table1中的行,其中table2中的所有值都是<= 123。这仅在极少数情况下有用。

答案 1 :(得分:-1)

尝试以下查询并检查

Select * From table1 As t1 INNER JOIN table2 As t2 On t2.key2 = t1.key1 Where t2.value1 Is NULL Or t2.value1 > 123;

它应该适用于你的逻辑