2

次のテーブル構造があります。

item_id | 値 |  
==================  
1 | 1 |  
1 | 3 |  
1 | 4 |  
2 | 2 |  
2 | 3 |  
2 | 4 |  
2 | 5 |  
3 | 1 |  
3 | 5 |  
3 | 6 |  
4 | 1 |  
4 | 3 |  
4 | 4 |  
4 | 5 |  

値が 1、3、および 4 に一致する item_id を返すクエリがあります。ここでは、返される必要がある item_id は 1 と 4 です。

私のクエリ:

テーブル t から item_id を選択
存在する場所 (値 = 1 および t1.item_id = t.item_id のテーブル t1 から item_id を選択)
および存在する (値 = 2 および t1.item_id = t.item_id であるテーブル t1 から item_id を選択) item_id によるグループ化

このクエリは正常に機能しています。ここでは、3 つの値のみを照合しています。テーブルから 50 個のそのような値を一致させたい場合はどうすればよいですか? (50 個の値はすべて php 配列に格納されます) クエリは巨大になり、同じクエリ内の 2 つの異なるテーブルから同じことを実行したいと考えています。したがって、これにより、すでに巨大なクエリのサイズが 2 倍になります。他の方法を提案してください。

編集::

表 2
--------

item_id | ユーザー ID |  
==================  
1 | 1 |  
1 | 5 |  
1 | 7 |  
2 | 2 |  
2 | 3 |  
2 | 4 |  
2 | 5 |  
3 | 1 |  
3 | 5 |  
3 | 6 |  
4 | 1 |  
4 | 3 |  
4 | 4 |  
4 | 5 |  

ここで、table1 の値が 1,3,4 であり、table2 の user_id が 1,5,7 である item_id が必要です

4

1 に答える 1

7

この問題は と呼ばれRelational Divisionます。

SELECT  item_ID
FROM    tableName
WHERE   value IN (1,3,4)
GROUP   BY item_ID
HAVING  COUNT(*) = 3

valueごとitem_idに一意性が強制されていない場合はDISTINCT、一意の値のみをカウントする必要があります。

SELECT  item_ID
FROM    tableName
WHERE   value IN (1,3,4)
GROUP   BY item_ID
HAVING  COUNT(DISTINCT value) = 3
于 2013-05-14T06:24:45.587 に答える