【发布时间】:2018-04-09 17:28:05
【问题描述】:
表结构和值如下:
CREATE TABLE IF NOT EXISTS `docs` (
`id` int(11) NOT NULL,
`id_sub` int(11) NOT NULL,
`id_obj` int(11) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `docs` (`id`, `id_sub`, `id_obj`) VALUES
('1','1', '1'),
('2','1', '2'),
('3','1', '3'),
('4','1', '10'),
('5','1', '1'),
('6','1', '10'),
('7','1', '3'),
('8','1', '10'),
('9','1', '1'),
('10','2', '30'),
('11','2', '10'),
('12','2', '1'),
('13','2', '10'),
('14','4', '1'),
('15','5', '1'),
('16','6', '1'),
('17','7', '1'),
('18','7', '10'),
('19','7', '11');
下一个查询选择我知道id_sub 和id_obj 具有相同值的行:
SELECT
*
FROM docs
WHERE `id_sub` IN (1,2,7)
AND `id_obj` IN (SELECT `id_obj` FROM `docs` GROUP BY 1 HAVING count(*)>1)
结果:
id | id_sub | id_obj
1 | 1 | 1
3 | 1 | 3
4 | 1 | 10
5 | 1 | 1
6 | 1 | 10
7 | 1 | 3
8 | 1 | 10
9 | 1 | 1
11 | 2 | 10
12 | 2 | 1
13 | 2 | 10
17 | 7 | 1
18 | 7 | 10
但我无法选择我知道id_sub 的行,其中 all id_obj 具有相同的值,即我无法获得下一个结果:
id | id_sub | id_obj
1 | 1 | 1
4 | 1 | 10
11 | 2 | 10
12 | 2 | 1
17 | 7 | 1
18 | 7 | 10
表有大约 20k 行,IN() 的计数值可以不同。
有什么想法吗?
UPD - 描述条件
我知道条件 id_sub 的值 - 1,2 或 7(示例)
我不知道值id_obj
预期结果的条件:
- 值
id_sub1、2 或 7 - 行没有重复值
id_sub&id_sub,即id= 1 和id= 5 的行是重复的(见值行),结果只能有一行id= 1(如果重复行需要返回第一个重复行) -
id_obj值应包含在每一行结果中,即: 现在结果我有:标识 | id_sub | id_obj
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
正如我们在此行中看到的,只有 id= 1 的行具有 id_obj 值,而其他行中的值:
id | id_sub | id_obj
1 | 1 | 1
12 | 2 | 1
17 | 7 | 1
对于所有表格,我希望得到下一个结果:
【问题讨论】:
-
您的预期结果是什么?
-
我不明白这个问题
-
我也不明白这个问题。
-
您似乎正在尝试获取每个不同 id_sub 块 id_obj 的第一个 id。但是我不明白为什么 3,1,3 不在结果集中。
-
其中 id_sub, id_obj count > 1
标签: mysql