我有这个问题,从我试图通过。我一直试图这样做几个小时,如果有人能指出我们正确的方向,那将是非常好的。
这是德语,所以我将用英语翻译它:
我们只对(d)部分有问题
(d)写一个SQL语句,给出餐厅的名称和餐厅的Ort(Place),不要点任何Salat。
预期结果将是:
Da Mafia:哥廷根
威尼斯:卡塞尔
答案 0 :(得分:3)
它不适用于LolCoder的答案,但是当子查询有空时,请记住要小心NOT IN。
这是另一种主题变化的方法。即使它确实使用了内部连接,但它并不完全是花哨的。你可能会在野外发现它们。
我的偏好是第一个。我通常也明确指出“其他无效”,即使技术上不必要。
-- A
SELECT name, min(ort) as ort
FROM kunde as k INNER JOIN Liefervertrag as l on l.pizzeria = k.name
GROUP by name
HAVING count(case when l.product = 'salat' then 1 else null end) = 0
-- B
SELECT name, min(ort) as ort
FROM kunde as k INNER JOIN Liefervertrag as l on l.pizzeria = k.name
GROUP by name
HAVING sum(case when l.product = 'salat' then 1 else 0 end) = 0
-- C
SELECT name, ort
FROM kunde as k INNER JOIN Liefervertrag as l on l.pizzeria = k.name
GROUP by name, ort
HAVING count(case when l.product = 'salat' then 1 else null end) = 0
-- D
SELECT name, ort
FROM kunde as k INNER JOIN Liefervertrag as l on l.pizzeria = k.name
GROUP by name, ort
HAVING sum(case when l.product = 'salat' then 1 else 0 end) = 0
答案 1 :(得分:1)
您可以尝试这样:
SELECT name,ort FROM kunde WHERE name NOT IN (SELECT DISTINCT(pizzeria) FROM Liefervertrag WHERE product='salat')