【问题标题】:how to Join five Tables with one another dependency in SQL如何在 SQL 中将五个表与另一个依赖项连接起来
【发布时间】:2018-09-05 23:48:06
【问题描述】:

我想在 SQL Server 中加入五个表。顺序如下。逻辑应该是 Table1 >>>>Key : ID >>>> Table_A & Table_B (If Table1.Status = ABC then Table_A else Table_B ) >>> Key : NUMBER >>> Table2 >>> Key : Number + Item_No >>> Table3

如果下面的代码可以工作,请帮忙。

SELECT * FROM 
TABLE1
LEFT JOIN (CASE WHEN status = 'ABC' THEN Table_A ELSE Table_B END ) X ON (Table1.ID = X.ID)
LEFT JOIN Table2 ON (X.NUMBER = Table2.NUMBER)
LEFT JOIN Table3 ON (Table3.CONCAT(NUMBER + Item_No) = Table2.CONCAT(NUMBER + Item_No))

【问题讨论】:

  • 以文本形式发布表格和数据READ THIS
  • 我建议您不要加入连接值。如果你想加入两条数据,那么使用两个谓词。 t3.Number = t2.number AND t3.ItemNo = t2.ItemNo。这不仅更准确,而且是 SARGable,而这种连接不是。
  • 您不能在 JOIN 之后立即使用条件 CASE WHEN 构造。要么加入,要么不加入...... CASE WHEN 只能产生一个值(例如 INT、VARCHAR),而不是整个表。
  • 而CASE是一个表达式,意思是它用于返回一个标量值。您不能使用 CASE 来决定要加入哪个表。那永远不会那样工作。

标签: sql-server


【解决方案1】:
SELECT Q.*, T2.ItemNo, T2.Product, T3.Connection
FROM (
     SELECT T1.ID, CASE WHEN T1.Status = 'ABC'
                        THEN TA.Number
                        ELSE TB.Number
                   END as Number
     FROM Table1 T1
     LEFT JOIN TableA TA
       ON T1.ID = TA.ID
     LEFT JOIN TableB TB
       ON T1.ID = TB.ID
     ) as Q
JOIN Table2 T2
  ON Q.Number = T2.Number
JOIN Table3 T3
  ON T2.ItemNo = T3.ItemNo

【讨论】:

  • 顺便说一句,不知道为什么 Table2 和 Table3 没有合并在一起
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多