0
我有以下哪些是有重复记录对于不同领域的表:表多个SQL查询联盟
CREATE TABLE Student1
(`id` int,`status` int,`amount` int , `Name` varchar(10), `date` varchar(55))
;
INSERT INTO Student1
(`id`,`status`,`amount`, `Name`, `date`)
VALUES
(1,0,4500, 'ram', '04/02/2012'),
(2,0,2000, 'shyam', '05/09/2013'),
(4,0,1500, 'ghanshyam', '08/11/2014'),
(3,0,4500, 'gopal', '04/02/2012'),
(2,0,8000, 'radheshyam', '15/11/2013'),
(4,1,1500, 'ghanshyam', '18/10/2015'),
(1,1,4500, 'ram', '14/02/2012'),
(2,0,6500, 'radhe', '11/11/2014'),
(3,1,4500, 'gopal', '14/02/2015'),
(5,1,4500, 'gopala', '04/02/2015'),
(5,1,4500, 'gopala', '04/02/2015'),
(6,0,14500, 'gopal', '14/02/2015')
;
我有3个条件来过滤表:
- 没有完全重复的记录
- 如果使用相同的
id
但不同的Name
和date
字段记录,则将其全部添加到最终结果中 - 如果
status=1
任何记录,然后选择相应的id
- 该记录与
id
不同的id
添加所有记录上述3个条件
我写了这个查询:
SELECT * FROM Student1
GROUP BY id,status,amount,Name,date
HAVING COUNT(*) > 1
UNION
SELECT * FROM Student1 Student1
WHERE id IN
(
SELECT id FROM Student1
GROUP BY id
HAVING COUNT(DISTINCT name) > 1
AND COUNT(DISTINCT date) > 1
)
UNION
SELECT * FROM Student1 Student1
WHERE status=1 AND id IN
(
SELECT id FROM Student1
GROUP BY id
HAVING COUNT(id) >= 2
);
结果:
id status amount Name date
4 1 1500 ghanshyam 18/10/2015
1 1 4500 ram 14/02/2012
3 1 4500 gopal 14/02/2015
5 1 4500 gopala 04/02/2015
2 0 2000 shyam 05/09/2013
2 0 8000 radheshyam 15/11/2013
2 0 6500 radhe 11/11/2014
正如你所看到的第一个选择避免d第二个选择相同的记录id
有不同的Name
,date
,第三个选择要获得记录id=1
。我正在使用UNION
以避免重复结果。
现在我需要添加第4个查询来获取记录id=6
这是不存在于上述所有条件。
预期结果:
id status amount Name date
4 1 1500 ghanshyam 18/10/2015
1 1 4500 ram 14/02/2012
3 1 4500 gopal 14/02/2015
5 1 4500 gopala 04/02/2015
2 0 2000 shyam 05/09/2013
2 0 8000 radheshyam 15/11/2013
2 0 6500 radhe 11/11/2014
6 0 14500 gopal 14/02/2015
我需要解决的第4个查询。请帮忙。
感谢m.cekiera,它的伟大工程 –
我要重新设计我的第三个查询条件是否会有两个纪录,状态= 1,那么它应该在比较中,挑选具有最低金额场 –
@LalitJadiya最低纪录?有状态= 1的meny记录,你的意思是,status = 1的重复记录,还是status = 1的所有记录中的一个? –