-3

重複の可能性:
SQL クエリが複数のテーブルからデータを返す方法

私は3つのテーブルを持っています

属性

attr_id | attr_name 
1       | oval<
2       | white

製品

product_id|product_name 
1         | amazonite 
2         | agate

attr_detail

attr_detail_id | attr_id | product_id
1              | 1       | 1
2              | 2       | 1
3              | 1       | 2
4              | 2       | 2

今欲しいのは、楕円形で色が白い商品です。ジョインの使い方。

4

1 に答える 1

1

これを試して:

SELECT DISTINCT
  p.product_id, 
  p.product_name 
FROM Product p 
INNER JOIN attr_detail ad ON p.product_id = ad.product_Id
INNER JOIN Attribute a    ON a.attr_id = ad.attr_id
WHERE a.attr_id IN(1, 2);

SQLフィドルデモ

これはあなたに与えるでしょう:

| PRODUCT_ID |           PRODUCT_NAME |
---------------------------------------
|          1 |              amazonite |
|          2 |                  agate |
|          3 | Product has only white |

注:whiteこれにより、またはのいずれかのoval形状の製品名が表示されます。ただし、2つの形状の両方を持つ製品のみを探している場合は、次のようにクエリを変更する必要があります。

SELECT DISTINCT
  p.product_id, 
  p.product_name 
FROM Product p 
INNER JOIN
(
  SELECT product_id
  FROM attr_detail
  WHERE attr_id IN(1, 2)
  GROUP BY product_id
  HAVING COUNT(DISTINCT attr_id) = 2
) ad ON p.product_id = ad.product_Id;

更新されたSQLフィドルデモ

これはあなたに与えるでしょう:

| PRODUCT_ID | PRODUCT_NAME |
-----------------------------
|          1 |    amazonite |
|          2 |        agate |

sについてもっと読んでくださいJOIN。ここでは、これに関する有用な情報を見つけることができます。

2番目のクエリで行ったことについて:

  SELECT product_id
  FROM attr_detail
  WHERE attr_id IN(1, 2)
  GROUP BY product_id
  HAVING COUNT(DISTINCT attr_id) = 2

これは、リレーショナル部門と呼ばれます。

于 2012-12-29T17:51:51.513 に答える