我有一个查询失败,出现模糊的列错误。不幸的是,由于我正在使用的框架(Magento 1),我不能通过在'where'子句中为列名添加正确的表名来解决这个问题。
给出两个示例表
T1 = colA | colB | colC
T2 = colD | colB | colE
我想要一个将加入colA
和colD
上的表的查询,只选择colC
和colE
,但在T1 {{1}上有一个where子句}。直接的SQL看起来像:
colB
问题是'where'子句已被核心代码设置为SELECT colC, colE
FROM T1 LEFT JOIN T2 ON colA=colD
WHERE T1.colB=1
,我无法轻易更改它以添加WHERE colB=1
前缀。
我尝试将其重写为这样的子查询:
T1
这有效并且给了我所期望的东西,但它的速度令人无法接受。
是否有任何聪明的SQL技巧可用于优化子查询,或重写连接,以便我可以使用where子句而不使用表前缀。
答案 0 :(得分:1)
这是如何表现的?
SELECT colC, colE
FROM T1 LEFT JOIN
T2
ON colA = colD AND T1.colB = 1
WHERE T1.colB = 1;
另一个替代方案是子查询,如下所示:
SELECT colC,
(SELECT colE
FROM T2
WHERE T1.colA = T2.colD
) as colE
FROM T1
WHERE colB = 1;
这应该与原始查询一样快(可能是利用了索引。