繁体   English   中英

多行条件下的mysql distinct列

[英]mysql distinct column on multiple row conditions

我有一个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中选择distinct preset_id,其中(item_id = 1和value = 2)和(item_id = 2,value = 1)和(item_id = 4,value = 60);

但得到一个空集。 如果我尝试使用Or而不是,我会获得符合任何条件的所有preset_ids。

有任何想法吗?

谢谢

你可能想试试这个,

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演示

更多括号,

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是keyword - 不要将值用作column name

你可以尝试这样的事情:

    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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM