2012-07-07 135 views
0

我有這個問題,我試圖通過。我一直在努力這麼做幾個小時,如果有人能指引我們走向正確的方向,那將是非常棒的。SQL加入聲明與where子句

這是德國人,所以我打算把它的英文翻譯:

我們只有問題(d)部分

(d)編寫SQL語句,讓餐廳和口服補液療法名(地點)的餐廳,不訂購任何薩拉特。

預期的結果將是:

大黑手黨:哥廷根
威尼斯:卡塞爾

enter image description here

回答

1

你可以嘗試這樣的:

SELECT name,ort FROM kunde WHERE name NOT IN (SELECT DISTINCT(pizzeria) FROM Liefervertrag WHERE product='salat') 
+0

現在,這似乎很容易......謝謝你這麼多 – 2012-07-07 18:20:59

+1

如果回答可以幫助你,不要忘了接受的答案.... – 2012-07-07 18:22:25

+0

是它沒有幫助,我會接受它,我還有另外一個問題:這也可以通過一些奇特的加入聲明來完成嗎?我的意思是你的解決方案是正確的,但我只是想知道 – 2012-07-07 18:24:36

3

不適到LolCoder的答案,但是當子查詢有空時請記住NOT NOT要小心。

這是另一種主題變化的方法。即使它使用內部連接,也不是很花哨。你可能會發現他們都在野外。

我的首選是第一個。即使沒有技術上的必要,我通常也會對「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 
+0

謝謝非常多,這也非常有幫助! – 2012-07-07 23:49:32

+0

但我似乎沒有得到這個工作。我繼續得到一個錯誤:「在having clause中找不到k.product」我檢查了所有的拼寫和拼寫錯誤... – 2012-07-07 23:55:15

+0

我發現了爲什麼...這裏有一個輕微的錯字...「k.product 「在子句中應該是」l.product「,否則它工作得很好! – 2012-07-07 23:58:09