【问题标题】:More than two table using joins两个以上的表使用连接
【发布时间】:2013-03-29 14:15:22
【问题描述】:

主表

ID Column1         TableA.fK TableB.fk
1  some-value        1          null
2  some-value        1          1
3  some-value        null       2

表A

TableA.pk  Column1
1          some-value

表B

TableB.pk Column1
1         some-value
2         some-value
Select  Main.ID,Main.Column1 ,A.Column1,B.Column1
FROM    MainTable main
LEFT JOIN
        Table A
ON      Main.TableA.fk = A.TableA.pk
LEFT JOIN
        TableB b
ON      Main.TableB.fk =B.TableB.fk
WHERE   Main.ID =1

意思

结果是

  ID  Column1     A.Column1  B.Column1
  1   some-value   some-value  null

期待输出

 ID    column1         A.Column1
 1     some-value     some-value  

不应显示 B.column1

当 tableA 的外键值不为空时,如果此处使用上述 SELECT 查询,则应从 TableA 获取所有详细信息
我正在使用 RDBMS Microsoft Sql Server 2008

【问题讨论】:

  • 如果您只期望IDA.Column1,为什么要将B.Column1 包含在您的SELECT 中?

标签: sql join


【解决方案1】:

只是不要将此列放入SELECT 列表中:

SELECT  Main.ID, A.Column1
FROM    MainTable main
LEFT JOIN
        Table A
ON      Main.TableA.fk = A.TableA.pk
LEFT JOIN
        TableB b
ON      Main.TableB.fk = B.TableB.fk
WHERE   Main.ID = 1

【讨论】:

  • 这是原始问题(已删除Link Here。 op 只想投影 non-null 列。所以基本上我对 OP 的建议是使用 dynamic sql.
【解决方案2】:

从您的查询中删除 B.Column1

Select Main.ID,A.Column1 FROM MainTable main LEFT JOIN Table A ON Main.TableA.fk=A.TableA.pk LEFT JOIN TableB b ON Main.TableB.fk =B.TableB.fk WHERE Main.ID =1

【讨论】:

    【解决方案3】:

    我不明白这里的问题。如果您不希望它显示B.Column1,请从您的Select 语句中取出B.Column1

    你现在有

    选择 Main.ID、A.Column1、B.Column1

    改成

    选择 Main.ID, A.Column1

    根据您下面的 cmets,您似乎正在寻找 CoalesceIsNull,具体取决于您使用的 DBMS(您也没有在问题中告诉我们)。

    这样的事情应该可以工作:

    SELECT  
      Main.ID, Coalesce(A.Column1, B.Column1) as Column1
    FROM    
      MainTable main
    LEFT JOIN
      Table A
    ON      
      Main.TableA.fk = A.TableA.pk
    LEFT JOIN
      TableB b
    ON
      Main.TableB.fk = B.TableB.fk
    WHERE   
      Main.ID = 1
    

    【讨论】:

    • 这是原始问题(已删除Link Here。 op 只想投影 non-null 列。所以基本上我对 OP 的建议是使用 dynamic sql.
    • 如果两个表的外键都不为空,我需要两个表
    • @JW:啊,是的。这种知识确实改变了很多事情。我会删除这个答案。感谢您的提醒。 :-)
    • @KenWhite 稍后删除它:) 其他人可能也需要看到这个:D
    • @AshokRavi:您需要编辑您的问题以提供更多信息。它现在所说的不是你刚才在评论中所说的。
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2015-02-24
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多