你想找出两张表中相同的行,但需要连接多列。前提,创建视图 X。
create view X
as
select name, job, salary
from emp
where job = 'Director'
返回 EMP 表中与视图X中行匹配的每位员工的信息。
解决方案
基于必要的列将表连接起来,以返回正确的结果。也可以使用集合运算 INTERSECT 来返回两张表的交集(两张表中相同的行),这样可以避免执行连接操作。
MySQL 和 SQL Server
使用多个连接条件将 EMP 表和视图X 连接起来。
select e.deptno,e.name,e.job,e.salary,e.deptno
from emp e, x
where e.name = x.name
and e.job = x.job
and e.salary = x.salary;
也可以使用 JOIN 子句来执行这个连接。
select e.deptno, e.name, e.job, e.salary, e.deptno
from emp e
join x
on (e.name = x.name
and e.job = x.job
and e.salary = x.salary);
DB2、Oracle 和 PostgreSQL
MySQL 和 SQL Server 解决方案也适用于 DB2、Oracle 和 PostgreSQL。需要返回视图 X 中的值时,应该使用该解决方案。
如果不需要返回视图 X中的列,那么可以结合使用集合运算 INTERSECT 和谓词 IN。
select deptno, name, job, salary, deptno
from emp
where (name, job, salary) in (select name, job, salary
from emp
intersect
select name, job, salary
from X);
扩展
执行连接操作时必须基于合适的列,这样才能返回正确的结果。当两张表中有些列的值可能相同,而其他列的值不同时,这一点尤其重要。
集合运算 INTERSECT 会返回两个数据源中相同的行。使用 INTERSECT 时,必须对两张表中数据类型相同的列进行比较。别忘了,集合运算默认不会返回重复的行。
点个赞吧,这对我非常重要!