我有这个问题,我正在努力解决。我一直在尝试这样做几个小时,如果有人能指出我们正确的方向,那就太好了。
这是德文,所以我要翻译成英文:
我们只有 (d) 部分有问题
(d) 编写一条 SQL 语句,给出餐厅的名称和不点任何 Salat 的餐厅的 Ort(Place)。
预期的结果是:
黑手党:哥廷根
威尼斯:卡塞尔
我有这个问题,我正在努力解决。我一直在尝试这样做几个小时,如果有人能指出我们正确的方向,那就太好了。
这是德文,所以我要翻译成英文:
我们只有 (d) 部分有问题
(d) 编写一条 SQL 语句,给出餐厅的名称和不点任何 Salat 的餐厅的 Ort(Place)。
预期的结果是:
黑手党:哥廷根
威尼斯:卡塞尔
它不适用于 LolCoder 的答案,但请记住当子查询有空值时要小心 NOT IN。
这是另一种主题变化的方法。即使它确实使用了内部连接,它也不完全是花哨的。你可能会在野外找到它们。
我的偏好是第一个。即使在技术上没有必要,我通常也会明确指出“else null”。
-- 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
你可以这样尝试:
SELECT name,ort FROM kunde WHERE name NOT IN (SELECT DISTINCT(pizzeria) FROM Liefervertrag WHERE product='salat')