这个问题可能是微不足道的,甚至是愚蠢的,但我想知道是否有一种方法可以在一对一匹配的多列上使用“IN”。 例如,我使用
select emp_id from employee where emp_id IN (select emp_id from employee_other)
我怎样才能实现像
这样的东西select emp_id from employee where emp_id,emp_org IN (select emp_id,emp_org from employee_other)
我知道我不能使用以下内容,因为它只是简单地进行联合,而我希望基于一对一记录匹配进行选择。
select emp_id from employee where emp_id IN (select emp_id from employee_other) and emp_org in (select emp_org from employee)
请注意,我不愿意使用EXCEPT。
谢谢你们
答案 0 :(得分:5)
您可能想要使用EXISTS运算符
select e.emp_id
from employee e
where EXISTS
(
SELECT *
FROM employee_other eo
WHERE e.emp_id = eo.emp_id
AND e.emp_org = eo.emp_org
)
答案 1 :(得分:3)
IN仅适用于单个列,即。你只能写X IN (...)
,而不能写X,Y IN (...)
。
根据您的数据,有两种方法可以解决此问题:
要加入,请执行以下操作:
select emp_id
from employee
inner join (select emp_id,emp_org from employee) as x
on employee.emp_id = x.emp_id and employee.emp_org = x.emp_org
然而,你的例子有点糟糕,因为你使用的是同一张表。
要使用EXISTS,请执行以下操作:
select emp_id
from employee
where exists (
select emp_id,emp_org from employee e2
where e2.emp_id = employee.emp_id and e2.emp_org = employee.emp_org)
这与连接一样,将主表链接到“子查询”表,但如果“子查询”产生多个匹配,则连接将产生重复行,EXISTS子句不会
答案 2 :(得分:-1)
使用内部联接
select e1.emp_id from employee e1
inner join employee_other e2 on e1.emp_id = e1.emp_id and e1.emp_org = e2.emp_org
如果employee_other表导致重复,您可能必须使用Distinct。
select Distinct e1.emp_id from employee e1
inner join employee_other e2 on e1.emp_id = e1.emp_id and e1.emp_org = e2.emp_org
答案 3 :(得分:-1)
我不明白你想要实现的目标emp_org in (select emp_org from employee)
并不总是如此?
这有用吗?
select emp_id from employee e
where exists (select 1 from employee_other eo
WHERE e.emp_id =eo.emp_id and
AND e.emp_org = eo.emp_org )
答案 4 :(得分:-1)
你在第二个例子中几乎完全正确。您只需在列名称周围添加parens。
select emp_id
from employee
where (emp_id,emp_org) IN (select emp_id,emp_org from employee)