-1

さて、私は同じ列にwhere句を何度も作成しようとしています。

  product
----------------------------------------
| product_id | product_name | group_id |
----------------------------------------

  group
-------------------------
| group_id | group_name |
-------------------------

  group_val
-------------------------
| group_id | product_id |
-------------------------


select b.product_name
from group_val a
inner join product b using(product_id) 
inner join group c using(group_id) 
where a.group_id in(10,15,88)
group by b.product_id;

それは同じor ... orですが、私は次のようなことをする必要があります:グループ10とグループ15およびグループ88にある製品のみが返されます:つまり、製品はこれらの3つのグループに含まれる必要があります。

すなわち:

  group_val
-------------------------
| group_id | product_id |
-------------------------
| 10       | 1          |
-------------------------
| 15       | 1          |
-------------------------
| 88       | 1          |
-------------------------
| 15       | 2          |
-------------------------
| 10       | 2          |
-------------------------

この場合、返品のみとなります1

どうすればいいですか?

4

2 に答える 2

0

サンプルクエリを操作し、プログラム上またはその他group_idの方法で、一致させようとしているものとその数を明示的に知っていると仮定します。

select `product_name`, count(gv.`product_id`) as cnt
from `product` p
left join `group_val` gv
on p.`product_id` = gv.`product_id`
where gv.`group_id` in (10, 15, 88)
group by p.`product_id`
having cnt = 3;

product_idそれらのすべてのグループにあるすべてのを選択しますgroup_val

于 2013-03-23T22:27:15.283 に答える
0

テーブル product にフィールド group_id は必要ありません

SELECT p.product_name
  FROM product AS p
    INNER JOIN group_val AS g1 ON p.product_id = g1.product_id
    INNER JOIN group_val AS g2 ON p.product_id = g2.product_id
    INNER JOIN group_val AS g3 ON p.product_id = g3.product_id
  WHERE g1.group_id = 10 AND g2.group_id = 15 AND g3.group_id=88;

SQL Fiddleで試してみてください

于 2013-03-23T21:32:54.300 に答える