繁体   English   中英

MySQL基于同一表中的多行选择行

[英]Mysql select row based on multiple rows in same table

我具有以下表结构:

item_id  | value |  
==================  
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。

我的查询:

select item_id from table t
where exists (select item_id from table t1 where value = 1 and t1.item_id = t.item_id)
and exists (select item_id from table t1 where value = 2 and t1.item_id = t.item_id) group by item_id

此查询工作正常。 在这里,我只匹配3个值。 如果我要匹配表中的50个此类值怎么办? (所有的50个值都存储在一个php数组中)查询将是巨大的,并且我也想从同一查询中的两个不同表中执行相同的操作。 因此,这将使已经很庞大的查询的大小增加一倍。 请提出其他建议。

编辑::

table 2
--------

item_id  | user_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   |

现在,我想要item_id,其中table1的值为1,3,4,user_id来自table2的为1,5,7

这个问题称为Relational Division

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

如果不是对每个item_idvalue都未强制唯一性,则要求DISTINCT仅计算唯一值,

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

暂无
暂无

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

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