Mam stół osoby i stół do miejsca z pól, typ i fonenumber. Chcę znaleźć wszystkie wpisy w tabeli osobie, która nie ma numeru telefonu domowego. Problem polega na tym, że albo mogą nie mieć domu w stole, albo mogą mieć dom, ale bez numeru telefonu domowego. (Jedna osoba może mieć dowolną liczbę powiązanych miejsc, więc nie mogę po prostu sprawdzić, czy nr Stowarzyszone miejsca).

Moje obecne zapytanie wygląda jak

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'))

Problem polega na tym, że podzewności jest naprawdę powolny, ponieważ nie robi się dołączenia. Jak mogę poprawić wydajność, albo za pomocą dołączenia w podzapytaniu lub przez inną sztuczkę?

sql
0
Ryan W 16 luty 2017, 20:44

2 odpowiedzi

Najlepsza odpowiedź

Uprość go do:

select id from person left join place on id = person
and type = 'home'
where phone is null
1
Dan Bracuk 16 luty 2017, 17:49

Spróbuj tego:

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
0
George Mastros 16 luty 2017, 17:49