我收到错误#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

最佳答案

请尝试以下查询:

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时,它陷入了模棱两可的情况。因此,通过使用列别名来消除此问题。

09-25 17:38