我无法弄清楚如何修复mySQL查询中的错误

时间:2016-04-27 02:39:47

标签: php mysql

我收到错误#1060 - 重复列名称'pizzeria',我不知道如何修复它。

问题是: 找到供应最便宜的意大利辣香肠比萨饼的比萨店。在领带的情况下,返回所有最便宜的意大利辣香肠比萨店。

SELECT C.pizzeria 
FROM (SELECT pizzeria FROM Serves WHERE pizza="pepperoni") C
LEFT JOIN
(SELECT A.pizzeria, A.price, B.pizzeria, B.price
FROM Serves A, Serves B
WHERE A.pizza = "pepperoni" and B.pizza="pepperoni" and A.price>B.price) D
ON C.pizzeria = D.pizzeria
WHERE D.pizzeria is NULL

2 个答案:

答案 0 :(得分:2)

请尝试以下查询:

SELECT C.pizzeria 
FROM (SELECT pizzeria FROM Serves WHERE pizza="pepperoni") C
LEFT JOIN
(SELECT A.pizzeria AS apizzeria, A.price, B.pizzeria AS bpizzeria, B.price
FROM Serves A, Serves B
WHERE A.pizza = "pepperoni" and B.pizza="pepperoni" and A.price>B.price) D
ON C.pizzeria = D.apizzeria
WHERE D.pizzeria is NULL;

此行SELECT A.pizzeria, A.price, B.pizzeria, B.price生成如下的中间结果集:

pizzeria    price   pizzeria    price
 ..          ..       ...        ...

因此,当您使用D.pizzeria时,它会将相应的列视为duplicate。事实上,从D.pizzeriaA.pizzeria(选择哪一个?)中选择B.pizzeria时,它会陷入模棱两可的境地。所以通过使用列别名来消除这种情况。

答案 1 :(得分:1)

问题是,在您的左连接语法下,您已经列出了a.pizzeria和b.pizzeria。然后,该内联视图将加入c.pizzeria,但编译器无法确定您正在加入的内联视图中的哪些比萨饼列。

我非常好奇你正在努力实现的目标,因为你正在让优化工作做很多工作。