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,我需要所有条件为真(item_id = 1 和 value_id = 2)、(item_id = 2 和 value = 1)等...

我尝试使用以下方法:从 item_preset 中选择不同的预设 ID,其中 (item_id = 1 和 value = 2) 和 (item_id = 2 和 value = 1) 和 (item_id = 4 和 value = 60);

但得到一个空集。如果我尝试使用 Or's 而不是,我会得到所有符合任何条件的预设 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));

并且 value 是 a keyword- 不要将 value 用作 acolumn 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 回答