【发布时间】:2020-03-13 21:35:39
【问题描述】:
我需要提取具有相同列值(没有重复)的所有行和具有不同值的其他列值。
我在尝试获取空值时遇到问题,因为“具有计数(不同)”这句话不包含空值。
我的例子(https://dbfiddle.uk/?rdbms=postgres_9.4&fiddle=ae1db1de07f9a54171c5121b49112273):
create table definition
(
job varchar(256),
bat varchar(256),
descr varchar(256)
);
INSERT INTO definition (job,bat,descr)
VALUES
('JOBA','SCRIPTA','caracoles'),
('JOBA','SCRIPTA','navajas'),
('JOBB','SCRIPTB','navajas'),
('JOBA','SCRIPTC','casa'),
('JOBC','SCRIPTC','asombrado'),
('JOBC','SCRIPTC','casa'),
('JOBC','SCRIPTKKK','asombrado'),
('JOBC','SCRIPTCDSFDF','pepelu'),
('JOBD',NULL,'casa'),
('JOBD','DFDSFDSFDSF','caracoles'),
('JOBA','SCRIPTC','casa'),
('JOBA','SCRIPTC','casa'),
('JOBJ','SCRIPTC','casa'),
('JOBB','SCRIPTB','love');
SELECT DISTINCT d.*
FROM definition d
JOIN
(
SELECT job
FROM definition
GROUP BY job
HAVING COUNT(DISTINCT(bat)) > 1
) x
ON d.job = x.job
它给了我:
job bat
JOBA SCRIPTA
JOBA SCRIPTC
JOBC SCRIPTC
JOBC SCRIPTCDSFDF
JOBC SCRIPTKKK
Warning: Null value is eliminated by an aggregate or other SET operation.
我也需要
JOBD,NULL
JOBD,DFDSFDSFDSF
【问题讨论】:
-
结果与您编写的查询不匹配。不过,你能发布你正在使用的数据库吗
-
为了更好地理解,您是否希望所有(工作、蝙蝠)组合至少有一个不同的描述?
-
对不起,我的英语很差。我需要所有至少出现两次的作业,并且 bat 列的值不同。
-
感谢脚本和 db fiddle 链接,它非常有助于制定解决方案
-
抱歉数据库是posgree,我已经更新了主帖
标签: sql sql-server