解析MySQL不明确的列而不使用表名前缀而不使用子查询

时间:2016-10-30 12:42:10

标签: mysql sql

我有一个查询失败,出现模糊的列错误。不幸的是,由于我正在使用的框架(Magento 1),我不能通过在'where'子句中为列名添加正确的表名来解决这个问题。

给出两个示例表

T1 = colA | colB | colC
T2 = colD | colB | colE

我想要一个将加入colAcolD上的表的查询,只选择colCcolE,但在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子句而不使用表前缀。

1 个答案:

答案 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;

这应该与原始查询一样快(可能是利用了索引。