私はmysqlデータベースに多種多様なテーブル設定を製品と属性とともに持っています。製品には多くの属性があり、多くの製品に属性を割り当てることができます。Mysql多対多関係 'and'と 'not'データを持つデータを取得する
今私はいくつかの属性が割り当てられているが、いくつかの他の属性は割り当てられていない製品を入手する必要があります。製品は、属性犬や食べ物を持っている必要があり、それはサーモンやチキンを持つことができ、それが持っていなければなりません。この例では
「鮭や鶏肉とし、穀物のないドッグフード」
:それはのような検索質問です粒。
table : product_attributes
+------------+----------------+
| product | attribute |
+------------+----------------+
| Product 1 | Dog |
| Product 2 | Cat |
| Product 3 | Dog |
| Product 1 | Food |
| Product 2 | Food |
| Product 3 | Food |
| Product 1 | Salmon |
| Product 2 | Chicken |
| Product 3 | Salmon |
| Product 1 | Chicken |
| Product 3 | Grain |
| Product 4 | Dog |
| Product 4 | Food |
| Product 4 | Cow |
+------------+----------------+
我々は、検索質問をピックアップしている場合、私はそれが犬、食品サーモン/チキンと一致し、それは穀物の属性を持っていないため、製品1は、表示したいです。プロダクト2はDog属性と一致せず、プロダクト3は必要としないグレイン属性を持ちます。だけは本当に「と」の関係犬&食品を選ぶ
+------------+
| product |
+------------+
| Product 1 |
+------------+
は問題ありませんが、私は「または」関係とクエリ
select product
from product_attribute
where attribute in ('dog', 'food')
group by product
having count(attribute) = 2
+------------+
| product |
+------------+
| Product 1 |
+------------+
の「ない」の関係を取得する必要があるとき、私はこだわっていますいくつかのデータと
単純なSQLフィドルは、ここで見つけることができます:http://www.sqlfiddle.com/#!9/e2ed09/4
よろしく、
マルタインBastiaansen
解決するためにあなたがしたくない製品と
exists
を除外するためにnot exists
を使用しますが、どのように 'サケ'または 'チキン'の 'または'のステートメントをクエリで処理できますか? 私はいくつかの余分なデータを使って質問とフィドルを編集しました。そのため、クエリは1の代わりに2つの製品に一致します。 –@MartijnBastiaansen今すぐチェックしてください –