我收到错误#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
答案 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.pizzeria
和A.pizzeria
(选择哪一个?)中选择B.pizzeria
时,它会陷入模棱两可的境地。所以通过使用列别名来消除这种情况。
答案 1 :(得分:1)
问题是,在您的左连接语法下,您已经列出了a.pizzeria和b.pizzeria。然后,该内联视图将加入c.pizzeria,但编译器无法确定您正在加入的内联视图中的哪些比萨饼列。
我非常好奇你正在努力实现的目标,因为你正在让优化工作做很多工作。