我在 SQL Server 中有以下代码结构。它在 WHERE 子句中使用多个旧格式 *= 联接?
SELECT ....
FROM (select ...) L1,
(select ...) L2,
(select ...) SE,
(select ...) EX,
(select ...) SE,
(select ...) Y1,
(select ...) Y2,
(select ...) Y3,
(select ...) Y4,
(select ...) Y5
WHERE SE.FV = EX.FV
and SE.FV *= Y1.FV
and SE.FV *= Y2.FV
and SE.FV *= Y3.FV
and SE.FV *= Y4.FV
and SE.FV *= Y5.FV
and SE.L1 *= L1.FV
and SE.L2 *= L2.FV
GROUP BY L1.FV, L1.Descr, L2.FV, L2.Descr
ORDER BY L1.FV, L1.Descr, L2.FV, L2.Descr
在实际代码中,选择是动态生成的 SQL 的大杂烩。但本质上,结构如我上面所示。
上述模板的结构应该是什么,以便它使用正确的 LEFT OUTER JOIN 语法,而不改变查询的逻辑?
这样的东西也许有用吗?
SELECT L1.FV, L1.Descr, L2.FV, L2.Descr, Y1.B, Y1.A, Y2.B, Y2.A, ...
FROM (select ...) SE
LEFT OUTER JOIN (select ...) Y1 ON SE.FV = Y1.FV
AND LEFT OUTER JOIN (select ...) Y2 ON SE.FV = Y2.FV
AND LEFT OUTER JOIN (select ...) Y3 ON SE.FV = Y3.FV
AND LEFT OUTER JOIN (select ...) Y4 ON SE.FV = Y4.FV
AND LEFT OUTER JOIN (select ...) Y5 ON SE.FV = Y5.FV
AND LEFT OUTER JOIN (select ...) L1 ON SE.L1 = L1.FV
AND LEFT OUTER JOIN (select ...) L2 ON SE.L2 = L2.FV,
(select ...) EX
WHERE SE.FV = EX.FV
GROUP BY L1.FV, L1.Descr, L2.FV, L2.Descr
ORDER BY L1.FV, L1.Descr, L2.FV, L2.Descr
最佳答案
希望您的查询能够转到以下结构。
SELECT L1.FV,
L1.Descr,
L2.FV,
L2.Descr,
..
FROM (select ...) L1
JOIN/LEFT JOIN (select ...) L2 ON L2.Col = ....
JOIN/LEFT JOIN (select ...) SE ON SE.Col = ....
JOIN/LEFT JOIN (select ...) EX ON EX.Col = ....
JOIN/LEFT JOIN (select ...) SE ON SE.Col = ....
JOIN/LEFT JOIN (select ...) Y1 ON Y1.Col = ....
JOIN/LEFT JOIN (select ...) Y2 ON Y2.Col = ....
JOIN/LEFT JOIN (select ...) Y3 ON Y3.Col = ....
JOIN/LEFT JOIN (select ...) Y4 ON Y4.Col = ....
JOIN/LEFT JOIN (select ...) Y5 ON Y5.Col = ....
GROUP BY L1.FV, L1.Descr, L2.FV, L2.Descr
ORDER BY L1.FV, L1.Descr, L2.FV, L2.Descr;
关于sql-server - 转换 WHERE 子句中的多个 'old format' 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32644506/