【问题标题】:A SQL example that not works一个不起作用的 SQL 示例
【发布时间】:2014-01-25 04:00:34
【问题描述】:

我写了这段代码

select maker.product , product.type
from product
join laptop on laptop.model=product.model
join pc on pc.model=product.model
join printer on printer.model=product.model 
WHERE (product.type= 'pc' AND 
(NOT EXISTS (SELECT maker 
FROM Product
WHERE product.type = 'laptop'
))and (NOT EXISTS (SELECT maker 
FROM Product
WHERE product.type = 'printer'  
))
or 
product.type= 'laptop' AND 
(NOT EXISTS (SELECT maker 
FROM Product
WHERE product.type= 'pc' 
))and (NOT EXISTS (SELECT maker 
FROM Product
WHERE product.type= 'printer'
))
or
type = 'printer' AND 
(NOT EXISTS (SELECT maker 
FROM Product
WHERE product.type= 'laptop' 
))and (NOT EXISTS (SELECT maker 
FROM Product
WHERE product.type= 'pc' 
)))
group by product.maker
having count(product.model) > 1

在这个站点sql-ex.ru 在练习 14 中,但它不起作用。 问题是: 对于Product表,以表格形式接收结果集,列:maker,pc,laptop,printer。对于每个maker,如果maker有相应类型的产品,该表必须包含“yes”,否则为“no”。在第一种情况下(是),在括号中(不带空格)指定相应类型的可用不同型号的数量(即在 PC、笔记本电脑和打印机表中)。

它的方案是

对不起,我的英语不好! 请帮忙 ! 谢谢。

【问题讨论】:

  • 1.使用一点缩进 - 有助于提高可读性 2. '不起作用'是什么意思 3. 为什么使用小提琴 sqlfiddle.com 作为示例进行演示以及潜在的人尝试答案
  • 我的意思是它没有返回正确的结果,也感谢你向我介绍那个网站
  • @ali - 整理缩进 - 整理出小提琴 - 你可能会到达某个地方

标签: sql


【解决方案1】:

这是您的代码更易读的版本(除非我犯了错误):

select maker.product , product.type
from product
join laptop on laptop.model=product.model
join pc on pc.model=product.model
join printer on printer.model=product.model 
WHERE (
  product.type= 'pc' AND 
  (NOT EXISTS (SELECT maker FROM Product WHERE product.type = 'laptop')) and
  (NOT EXISTS (SELECT maker FROM Product WHERE product.type = 'printer'))
  or 
  product.type= 'laptop' AND 
  (NOT EXISTS (SELECT maker FROM Product WHERE product.type= 'pc')) and
  (NOT EXISTS (SELECT maker FROM Product WHERE product.type= 'printer'))
  or
  type = 'printer' AND 
  (NOT EXISTS (SELECT maker FROM Product WHERE product.type= 'laptop')) and
  (NOT EXISTS (SELECT maker FROM Product WHERE product.type= 'pc'))
)
group by product.maker
having count(product.model) > 1

基本上,您似乎需要在每个 OR 之间加上括号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2013-12-04
    • 2016-08-31
    • 2016-02-25
    相关资源
    最近更新 更多