我有这个问题,我试图通过。我一直在努力这么做几个小时,如果有人能指引我们走向正确的方向,那将是非常棒的。SQL加入声明与where子句
这是德国人,所以我打算把它的英文翻译:
我们只有问题(d)部分
(d)编写SQL语句,让餐厅和口服补液疗法名(地点)的餐厅,不订购任何萨拉特。
预期的结果将是:
大黑手党:哥廷根
威尼斯:卡塞尔
我有这个问题,我试图通过。我一直在努力这么做几个小时,如果有人能指引我们走向正确的方向,那将是非常棒的。SQL加入声明与where子句
这是德国人,所以我打算把它的英文翻译:
我们只有问题(d)部分
(d)编写SQL语句,让餐厅和口服补液疗法名(地点)的餐厅,不订购任何萨拉特。
预期的结果将是:
大黑手党:哥廷根
威尼斯:卡塞尔
你可以尝试这样的:
SELECT name,ort FROM kunde WHERE name NOT IN (SELECT DISTINCT(pizzeria) FROM Liefervertrag WHERE product='salat')
不适到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
谢谢非常多,这也非常有帮助! – 2012-07-07 23:49:32
但我似乎没有得到这个工作。我继续得到一个错误:“在having clause中找不到k.product”我检查了所有的拼写和拼写错误... – 2012-07-07 23:55:15
我发现了为什么...这里有一个轻微的错字...“k.product “在子句中应该是”l.product“,否则它工作得很好! – 2012-07-07 23:58:09
现在,这似乎很容易......谢谢你这么多 – 2012-07-07 18:20:59
如果回答可以帮助你,不要忘了接受的答案.... – 2012-07-07 18:22:25
是它没有帮助,我会接受它,我还有另外一个问题:这也可以通过一些奇特的加入声明来完成吗?我的意思是你的解决方案是正确的,但我只是想知道 – 2012-07-07 18:24:36