2012-04-03 14 views
4

は、私が唯一のラップトップを作る製品のメーカーを見つけようとしています例に答える必要はありませんPCのMySQLのトリガ。

Relations: 
Product(maker, model, type) 
Laptop(Model, price, speed, ram, hd, screen) 
PC(model, price, speed, ram, hd) 
Printer(model,price, color, price) 

私はそれを取る

(SELECT maker, type 
FROM product WHERE type = 'laptop') 
DIFFERENCE 
(SELECT maker, type 
FROM product WHERE type = 'pc'); 

は差の操作は、MySQLに存在しないを試してみましたか?

+0

http://nimal.info/blog/2007/intersection-and-set-difference-in-mysql-a-workaround-forを参照してください。 -except/ – mellamokb

+0

質問:ラップトップを持ち、PCはないメーカーが欲しいですか? PCはありますがラップトップはないメーカーが欲しいですか? – RolandoMySQLDBA

答えて

1
select maker, type from product 
where type='laptop' and 
maker not in (select maker from product where type = 'pc') 
+0

ハ!私は同時に同じ行を書きました:-)(これは正しいアプローチです) –

-1
SELECT p.maker, p.type 
    FROM product p 
    WHERE p.type = 'laptop' 
    AND NOT EXISTS ( 
     SELECT p2.maker, p2.type 
     FROM table p2 
     WHERE p2.type = 'pc' 
     AND p2.maker = p1.maker 
    ) 
1

SELECT maker, type FROM product WHERE type = 'laptop' AND type != 'pc';

+0

実際これはまったく間違っていますが、参照用に削除を取り消しました。同時にPCとラップトップの両方ではないPRODUCTSを選択するため、ゴミだけが返されます。再び、間違っていてOPの質問とは何の関係もありません。より有能なアプローチについては私の他の答えを見てください。 –

2
SELECT 
    p1.maker, 
    p1.type 
FROM 
    product p1 
    LEFT JOIN product p2 ON p2.maker = p1.maker AND p2.type = 'pc' 
WHERE 
    p1.type = 'laptop' 
    p2.maker IS NULL 
+0

サブクエリが連続して実行されるため、このアプローチは少し高価です。 – kasavbere

+0

@kasavbereあなたの答えは...と+1を修正しました。 –

0
SELECT `maker`, `type` FROM `product` WHERE `type` = 'laptop' AND `maker` NOT IN 
       (SELECT `maker`, `type` FROM `product` WHERE `type` = 'pc'); 
関連する問題