4

次の表のmysqlデータベース(item_preset)があります。

+-----+-----------+---------+-------+ 
| id  | preset_id | item_id | value |
+-----+-----------+---------+-------+
| 1   | 1         | 1       | 2     | 
| 2   | 1         | 2       | 1     | 
| 3   | 1         | 4       | 60    | 
| 4   | 1         | 3       | 16    | 
| 5   | 1         | 3       | 17    | 
| 6   | 1         | 3       | 18    |
| 7   | 1         | 3       | 25    |
| 8   | 1         | 3       | 26    | 
| 9   | 1         | 3       | 27    | 
| 10  | 2         | 1       | 3     | 
| 11  | 2         | 2       | 0     | 
| 12  | 2         | 4       | 0     | 
| 13  | 2         | 3       | 16    | 
| 14  | 2         | 3       | 17    | 
| 15  | 2         | 3       | 19    | 
| 16  | 2         | 3       | 20    | 
| 17  | 2         | 3       | 21    | 
| 18  | 3         | 1       | 2     | 
| 19  | 3         | 2       | 0     | 
| 20  | 3         | 4       | 0     | 
| 21  | 3         | 3       | 25    | 
| 22  | 3         | 3       | 28    | 
| 23  | 4         | 1       | 1     | 
| 24  | 4         | 2       | 1     | 
| 25  | 4         | 4       | 120   | 
| 26  | 4         | 3       | 16    | 
| 27  | 4         | 3       | 17    |         
| 28  | 4         | 3       | 18    | 
| 29  | 4         | 3       | 22    | 
| 30  | 4         | 3       | 23    | 
| 31  | 4         | 3       | 24    | 
| 32  | 6         | 1       | 3     | 
| 33  | 6         | 2       | 1     | 
| 34  | 6         | 4       | 90    | 
| 35  | 6         | 3       | 18    | 
| 36  | 6         | 3       | 22    | 
| 37  | 6         | 3       | 23    | 
| 38  | 6         | 3       | 24    | 
| 39  | 6         | 3       | 29    | 
| 40  | 6         | 3       | 30    | 
+-----+-----------+---------+-------+

私がやりたいのは、複数の行からの条件に基づいて、個別のpreset_idを取得することです。たとえば、preset_id 1を取得するには、すべての条件がtrue(item_id=1およびvalue_id=2)、(item_id=2およびvalue=1)などである必要があります。

私は以下を使用してみました:item_presetから個別のpreset_idを選択します。ここで(item_id=1およびvalue=2)および(item_id=2およびvalue=1)および(item_id=4およびvalue=60);

しかし、空のセットを取得します。代わりにOrを試してみると、いずれかの条件に一致するすべてのpreset_idが取得されます。

何か案は?

ありがとう

4

3 に答える 3

2

あなたはこのことを試してみたいかもしれません、

SELECT   preset_id
FROM    tableName
WHERE   (item_id = 1 and value = 2) OR 
        (item_id = 2 and value = 1) OR
        (item_id = 4 and value = 60)
GROUP BY preset_id
HAVING COUNT(*) = 3

SQLFiddleデモ

于 2012-10-17T02:30:26.017 に答える
1

さらにブラケット、

select distinct(preset_id) from item_preset where ((item_id = 1 and value = 2) or (item_id = 2 and value = 1) or (item_id = 4 and value = 60));

値は a keyword- 値を a として使用しないでくださいcolumn name

于 2012-10-17T02:26:07.503 に答える
1

次のようなことを試すことができます:

    select distinct preset_id from item_preset 
where preset_id in (select preset_id from item_preset where item_id = 1 and value = 2) 
and preset_id in (select preset_id from item_preset where item_id = 2 and value = 1) 
and preset_id in (select preset_id from item_preset where item_id = 4 and value = 60);
于 2012-10-17T02:27:01.307 に答える