2016-04-07 5 views
1

申し訳ありません私が編集すると、製品、product_toカテゴリ、product_attribute、およびattribute_descriptionの4つのテーブルがあります。条件を選択(すべてのデータにこの基準があります)Sql

すべてのテーブルには関係があります。この製品のように

apple, category = 193 
dell, category = 100 
asus, category = 99 

、すべてのカテゴリについては、オールインワン100(製品ID = ...)、マックノート200(製品ID =(アップルのMacのような子供を持っています.. ...)

そして、すべての子供の製品はいくつかの属性を持っている(Apple社のMacオールインワン100(VGA、ラム、DLL))

製品:。。

Product_id 

Product_to_category:(製品との関係)

product_id   category_id 

Product_attribute:(製品とattribute_descriptionとの関係)

product_id   attribute_id 

attribute_description:

attribute_id   name(vga,ram,dll) 

私はすべての属性を選択しようケース(この属性を持つ製品)

例:

製品リンゴ-1は、属性VGA、RAM、プロセッサ、明るさを有します。

製品apple-2には、vga、ram、processorという属性があります。

製品apple-3にはmemory、os、processor、ramがあります。

(すべての商品にこの属性がある)すべての属性を選択します。 であり、答えはramおよびプロセッサ(coz、apple1-3にこの属性があります)です。

何を私は知っていることは、このようにカテゴリ193(リンゴ)から1で、すべての属性を選択します:

SELECT DISTINCT ad.name 
FROM product_to_category AS ptc 
INNER JOIN product AS p ON ptc.product_id = p.product_id 
INNER JOIN product_attribute AS pa ON p.product_id = pa.product_id 
INNER JOIN attribute_description AS ad ON pa.attribute_id = ad.attribute_id 
WHERE ptc.category_id =193 

しかし、私はそれがだ場所(条件いかなる製品Appleはこの属性を持つ)カテゴリappleからすべてのname属性を選択します共通の共通属性。

私が知りたいのは、アップル製品のすべてが所有しているものです。

+0

あなたの要件が明確ではありません。いくつかのサンプル入力と予想される出力を追加してください。 – 1000111

+0

つまり、異なる製品の共通の属性を取得する必要があります。右?私が間違っていないならば、あなたはちょうど異なる製品の属性セットの交差点を望んでいます。 – 1000111

+0

@ 1000111 yeach一般的な属性、 – Newbi

答えて

0

not existsを使用して、すべての製品に関連付けられている属性を選択する方法です。

select * from attribute_desc ad 
where not exists (
    select 1 from product p 
    left join product_to_attribute pta on pta.product_id = p.product_id 
     and pta.attribute_id = ad.attribute_id 
    where pta.attribute_id is null 
) 

not existsleft join ... null形二重否定。言い換えれば、欠落した製品関連を持たない属性が選択される。

属性ごとに個別の製品の#をカウントするサブクエリを使用して別の方法:

select attribute_id 
from product_to_attribute 
group by attribute_id 
having count(distinct product_id) = (select count(*) from product) 
+0

それはすごく、私はあなたの答えを試してみますが、これは '不明な列 'ad.attribute_id' on節 'の – Newbi

+0

の' attribute_desc'テーブルに' attribute_id'という列? – FuzzyTree

+0

私は がEXISTS、NOT attribute_desc ( はLEFTがpta.attribute_id ON広告としてattribute_desc登録しようpta.product_id = p.product_id ON PTA AS product_to_attributeを登録しよP などの製品からの1 をSELECT SELECT * FROM '= をSQLを変更してみてください= ad.attribute_id WHERE pta.attribute_id is NULL ) ' – Newbi

関連する問題