Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 慢速查询-选择不存在外部属性的行_Sql - Fatal编程技术网

Sql 慢速查询-选择不存在外部属性的行

Sql 慢速查询-选择不存在外部属性的行,sql,Sql,我有一个Person表和一个Place表,其中包含Person、Type和PhoneNumber字段。我想查找Person表中没有家庭电话号码的所有条目。问题是,他们可能没有一个家在桌子上,或者他们可能有一个家,但没有家庭电话号码。(一个人可以有任意数量的关联位置,所以我不能只检查没有关联的位置。) 我当前的查询看起来像 SELECT ID from Person LEFT JOIN Place on Person.ID = Place.Person WHERE (Place.Type = '

我有一个Person表和一个Place表,其中包含Person、Type和PhoneNumber字段。我想查找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'))
问题是子查询速度非常慢,因为它没有进行连接。如何通过在子查询中使用联接或其他技巧来提高性能?

试试以下方法:

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
将其简化为:

select id from person left join place on id = person
and type = 'home'
where phone is null

您的表的模式是什么?您使用的是SQL Server、MySQL、Oracle等吗?不过,人与地之间存在一对多的关系。我将把它添加到问题中。类型为null的筛选器为unnecessary@DanBracuk-看过你的回答后,我发现你是对的。然而,基于表中可能存在或不存在的索引,它仍然认为值得尝试。