[英]Mysql check multiple rows of same id
我将从桌子开始:
id | name | label_id | package_id
1 Fred 23742 1056
2 Fred 23742 1351
3 Jack 43743 1057
4 Jack 43743 1352
5 Bob 13523 1056
6 Anna 58232 1056
7 Anna 58232 1057
因此,每个人都有自己的标签ID,但共享package_id。 我只希望所有具有(1056或1057)和(1351或1352或1353)包裹ID的人
1 Fred 23742 1056
2 Fred 23742 1351
3 Jack 43743 1057
4 Jack 43743 1352
6 Anna 58232 1056
7 Anna 58232 1353
但排除像鲍勃那样只有一行的人
5 Bob 13523 1056
如果需要的话,我会尝试详细说明,因为这很难解释。
我相信您正在寻找这样的东西。 这将选择package_id在您列出的数字中的所有行,并排除表中只有一行的人。
select * from <table-name>
where package_id in (1056, 1057, 1351, 1352, 1343)
and name in (
select name from <table-name>
group by name
having count(*) > 1
);
MySQL 5.6模式设置 :
CREATE TABLE mytable
(`id` int, `name` varchar(4), `label_id` int, `package_id` int)
;
INSERT INTO mytable
(`id`, `name`, `label_id`, `package_id`)
VALUES
(1, 'Fred', 23742, 1056),
(2, 'Fred', 23742, 1351),
(3, 'Jack', 43743, 1057),
(4, 'Jack', 43743, 1352),
(5, 'Bob', 13523, 1056),
(6, 'Anna', 58232, 1056),
(7, 'Anna', 58232, 1353)
;
查询1 :
select *
from mytable
where name in (
select name
from (
select distinct name
from mytable
where package_id in (1056, 1057)
union all
select distinct name
from mytable
where package_id in (1351, 1352, 1353)
) as result
group by name
having count(*) > 1)
结果 :
| id | name | label_id | package_id |
|----|------|----------|------------|
| 1 | Fred | 23742 | 1056 |
| 2 | Fred | 23742 | 1351 |
| 3 | Jack | 43743 | 1057 |
| 4 | Jack | 43743 | 1352 |
| 6 | Anna | 58232 | 1056 |
| 7 | Anna | 58232 | 1353 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.