0

我有这个问题,我正在努力解决。我一直在尝试这样做几个小时,如果有人能指出我们正确的方向,那就太好了。

这是德文,所以我要翻译成英文:

我们只有 (d) 部分有问题

(d) 编写一条 SQL 语句,给出餐厅的名称和不点任何 Salat 的餐厅的 Ort(Place)。

预期的结果是:

黑手党:哥廷根
威尼斯:卡塞尔

在此处输入图像描述

4

2 回答 2

3

它不适用于 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
于 2012-07-07T20:12:29.787 回答
1

你可以这样尝试:

  SELECT name,ort FROM kunde WHERE name NOT IN (SELECT DISTINCT(pizzeria) FROM Liefervertrag WHERE product='salat')
于 2012-07-07T18:12:35.013 回答