【发布时间】:2015-12-15 03:49:48
【问题描述】:
我在 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
【问题讨论】:
-
您已经指定了 GROUP BY 列 L1.FV、L1.Descr、L2.FV、L2.Descr。编写 SELECT 时,除 GRROUP BY 之外的任何其他列都应与函数一起应用。例如:MAX(Y1.B)。除此之外,您的查询应该可以工作。
标签: sql-server tsql join database-migration