我有一个Person表,以及一个包含Person,Type和PhoneNumber字段的Place表。我想找到Person表中没有家庭电话号码的所有条目。问题是,他们要么可能没有桌上的房子,要么他们可能有家,但没有家庭电话号码。 (一个人可以拥有任意数量的关联地点,因此我无法检查没有相关地点。)
我当前的查询类似于
SELECT ID from Person LEFT JOIN Place on Person.ID = Place.Person WHERE
(Place.Type = 'home' AND Place.Phone IS NULL)
OR (NOT EXISTS
(SELECT * FROM Place where Person.ID = Place.Person and Place.Type= 'home'))
问题是子查询非常慢,因为它没有进行连接。如何通过在子查询中使用连接或通过其他技巧来提高性能?
答案 0 :(得分:1)
简化为:
select id from person left join place on id = person
and type = 'home'
where phone is null
答案 1 :(得分:0)
试试这个:
SELECT ID
from Person
LEFT JOIN Place
on Person.ID = Place.Person
and Place.Type = 'home'
WHERE Place.Phone IS NULL
Or Place.Type Is NULL