【问题标题】:Join two tables, but not all keys are available in both加入两个表,但并非所有键都可用
【发布时间】:2018-04-16 11:39:46
【问题描述】:

我找不到解决方案。可能也是因为有点难以解释。

我得到了带有 key1 的 table1。 我得到了带有 key2、value1 的 table2。

我的声明:

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。因此,我的结果中没有这些键,但我需要它们。如果 key in 不在 table2 中,那么 value1 很遗憾不为空。我可以在那里检查一些“价值”吗?

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。
  • 你的SQL要求不清楚,你能解释一下——你到底想要什么。基于此,您可以使用不同的连接,在您的情况下这似乎是完全可能的,请分享您的要求

标签: sql


【解决方案1】:

通常,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。这仅在极少数情况下有用。

【讨论】:

    【解决方案2】:

    尝试下面的查询并检查

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

    它应该适合你的逻辑

    【讨论】:

      猜你喜欢
      • 2017-12-11
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多