希望标题足够清晰!我正在寻找一个复制下一个功能的单个查询,但不使用子查询:
select p_id from a_p
where a_id=1
and p_id not in (select p_id from a_p where a_id=2)
例如,表a_p具有以下行:
a_id | p_id
1 | 1
1 | 2
2 | 2
这里,p_id 1出现在a_id 1但不是a_id 2 - 上面的查询只返回p_id 1.有什么想法吗?
答案 0 :(得分:1)
无法使用子查询,这使您使用LEFT OUTER JOIN / IS NULL:
SELECT a.p_id
FROM A_P a
LEFT JOIN A_P b ON b.p_id = a.p_id
AND b.a_id = 2
WHERE a.a_id = 1
AND b.p_id IS NULL
请注意,所有数据库供应商的子查询性能都不相同。在PostgreSQL和Oracle中,NOT IN,NOT EXISTS和LEFT JOIN / IS NULL都是等价的。只有在MySQL中,LEFT JOIN / IS NULL才更有效。