2014-01-24 30 views
0

一個SQL的例子,我在練習14寫了這個代碼不是工作

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,但沒有奏效。 問題是: 對於產品表,得到的結果與列的表的形式設置:製造商,PC,筆記本電腦和printer.For每個製造商,該表必須包含「是」如果製造商具有相應類型的產品否則爲「否」。在第一種情況下(是),在括號(無空格)中指定相應類型(即在PC,筆記本電腦和打印機表格中)的可用不同型號的數量。

而且它的計劃是

Scheme Picture

對不起,我不好講英語! 請幫忙! 謝謝。

+3

它傷害了我的眼睛。 – DarthVader

+1

1.使用一點縮進 - 有助於可讀性2.你是什麼意思「不起作用」3.爲什麼使用小提琴http://sqlfiddle.com/作爲示例來演示,還有潛在的人試試答案 –

+0

我的意思是它不返回確認當期的結果 同時也感謝您爲我介紹一下該網站 – Ali

回答

0

這是你的代碼的可讀性更強的版本(除非我犯了一個錯誤):

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的。

+0

感謝您的編輯! – Ali