我在sql查询中需要帮助。
我有两张表Person_Table
和PersonAlias_Table
。在第一个表中, person_id 和 uniqe_id 是主键,在别名表中还有 person_id 和uniqe_id以及 activity_code 是主要的。我想找到Alias表但不在人员表中的数据。
答案 0 :(得分:2)
select *
from PersonAlias_Table PA
left outer join Person_Table P on PA.person_id = P.person_id
and PA.uniqe_id = P.uniqe_id
where P.uniqe_id is null
试试这个
答案 1 :(得分:0)
执行此操作的最佳方式取决于您的DBMS,您可以使用NOT EXISTS
或LEFT JOIN/IS NULL
NOT EXISTS
SELECT *
FROM PersonAlias_Table pat
WHERE NOT EXISTS
( SELECT 1
FROM Person_Table pt
WHERE pt.Person_ID = pat.Person_ID
AND pt.Uniqe_ID = pat.Uniqe_ID
)
LEFT JOIN / IS NULL
SELECT *
FROM PersonAlias_Table pat
LEFT JOIN Person_Table pt
ON pt.Person_ID = pat.Person_ID
AND pt.Uniqe_ID = pat.Uniqe_ID
WHERE pt.Person_ID IS NULL
根据MySQL中的this answer NOT EXISTS
效率稍低,在SQL Server LEFT JOIN / IS NULL
中效率较低,在PostgreSQL和Oracle中两种方法都相同,所以它确实是个人偏好。