【问题标题】:Trouble with a conditional join有条件连接的问题
【发布时间】:2014-12-19 23:19:57
【问题描述】:

我尝试加入取决于table1.column1null 还是null

例如,我有两个表,table1table2,以及查询:

SELECT
    A.column2
FROM table1 A , table2 B
WHERE if A.column1 is not null then (A.column1=B.column1)
      else if A.column1 is  null then (A.column3 = B.column1);

【问题讨论】:

  • 建议使用普通的JOIN 语法,而不是将所有表放在已弃用的FROM 子句中。
  • 这没有意义。 A.column1 为空,那你为什么要加入 B.column1。
  • 这里有一个严重的逻辑问题。如果 A.column1 为 NULL,则 A.column1 = B.column1 是不可能的。
  • @Aaron Bertrand 很抱歉没有正确构图...
  • 我正在尝试检查 A.column1 是否为空然后 (A.column1=B.column1) 否则如果 A.column1 为空则 (A.column3=B.column1)

标签: sql database oracle11g


【解决方案1】:

试试这个:

SELECT
    A.column2
FROM table1 A
JOIN table2 B ON
    B.column1 = A.column1 OR
    (A.column1 IS NULL AND B.column1 = A.column3)

请注意,如果B.column1A.column1NULL,则B.column1 = A.column1 永远不会为真。

【讨论】:

    【解决方案2】:

    试试这个...

    SELECT A.column2
    FROM table1 A 
        JOIN table2 B ON NVL(A.column1, A.column3) = b.Column1
    

    如果b.Column1也可以为null,而你想比较两个null列,你可以试试这个...

    SELECT A.column2
    FROM table1 A 
        JOIN table2 B ON NVL(b.Column1, 'X') = COALESCE(A.column1, A.column3, 'X') 
    

    假设 b.Column1 永远不会有值 'X'

    【讨论】:

    • 它给了我这个错误 ORA-00904: "ISNULL": invalid identifier 00904. 00000 - "%s: invalid identifier"
    • 您的标签上写着 sql-server ?将 ISNULL 更改为 NVL
    • 我尝试使用 NVL.. 但它没有给我正确的结果
    • 那么你应该澄清你的问题。此查询完全符合您的要求。
    • 您能否发布示例数据,并获得预期结果
    猜你喜欢
    • 2022-09-25
    • 1970-01-01
    • 2020-08-20
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    相关资源
    最近更新 更多