【发布时间】: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