我有一个查询因不明确的列错误而失败。不幸的是,由于我使用的框架(Magento 1),我不能仅仅通过在“where”子句中使用正确的表名作为列名前缀来解决此问题。
给出两个示例表
T1 = colA | colB | colC
T2 = colD | colB | colE
我想要一个将连接 colA
和 colD
上的表的查询,仅选择 colC
和 colE
,但在 T1 的 colB
上有一个 where 子句。直接的 SQL 如下所示:
SELECT colC, colE
FROM T1 LEFT JOIN T2 ON colA=colD
WHERE T1.colB=1
问题是“where”子句已由核心代码设置为 WHERE colB=1
,我无法轻松更改它以添加 T1
前缀.
我尝试将其重写为子查询,如下所示:
SELECT colC,colE
FROM T1 LEFT JOIN (SELECT colD,colE FROM T2) ON colA=colD
WHERE colB=1
这有效并给了我我所期望的结果,但速度慢得令人无法接受。
是否有任何巧妙的 SQL 技巧可用于优化子查询或重写联接,以便我可以使用不带表前缀的 where 子句。
最佳答案
它的表现如何?
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;
这应该与原始查询一样快地执行(这可能利用了索引。
关于mysql - 解决MySQL不明确的列,不加前缀表名,不使用子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40329197/