【发布时间】:2015-05-07 04:54:38
【问题描述】:
我有下表,其中包含两个字段,即 a 和 b,如下所示:
create table employe
(
empID varchar(10),
department varchar(10)
);
插入一些记录:
insert into employe values('A101','Z'),('A101','X'),('A101','Y'),('A102','Z'),('A102','X'),
('A103','Z'),('A103','Y'),('A104','X'),('A104','Y'),('A105','Z'),('A106','X');
select * from employe;
empID department
------------------
A101 Z
A101 X
A101 Y
A102 Z
A102 X
A103 Z
A103 Y
A104 X
A104 Y
A105 Z
A106 X
注意:现在我要显示唯一且仅属于部门Z 和Y 的员工。
所以根据条件,应该显示唯一的员工A103,因为他只属于
部门Z和Y。但是员工A101 不应该出现,因为他属于Z,X, and Y。
预期结果:
如果条件是:Z 和 Y,那么结果应该是:
empID
------
A103
如果条件是:Z 和 X,那么结果应该是:
empID
------
A102
如果条件是:Z,X 和 Y,那么结果应该是:
empID
------
A101
注意:我只想在where 子句中执行(不想使用group by 和having 子句),因为我要去将这个包含在另一个 where 中。
【问题讨论】:
-
为什么不想使用
GROUP BY和HAVING?使用JOIN可能会导致性能问题。 -
@wewestthemenace,因为我想通过使用
AND将这个条件与另一个条件加入。 -
为什么不在派生表或cte中使用这个sql呢?
-
@MAK 这个方法怎么样
select empID from ( select empID,string_agg(department,',') dep from employe group by empID)t where dep in ('Z,Y')?? -
@MAK 是的,但是您标记了 PostgreSQL,这就是为什么:D,仅标记相关数据库
标签: sql sql-server postgresql sql-server-2008-r2