带有where子句的SQL join语句

时间:2012-07-07 18:04:37

标签: sql join left-join inner-join

我有这个问题,从我试图通过。我一直试图这样做几个小时,如果有人能指出我们正确的方向,那将是非常好的。

这是德语,所以我将用英语翻译它:

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

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

预期结果将是:

Da Mafia:哥廷根
威尼斯:卡塞尔

enter image description here

2 个答案:

答案 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')