MySQL: от подзапроса до одного запроса - PullRequest
0 голосов
/ 15 октября 2019

У меня есть запрос, который, по моему мнению, можно оптимизировать:

SELECT floors.id, floors.floor FROM floors
WHERE floors.societies_id = 1
AND floors.status = 'Y'
AND floors.id NOT IN (
    SELECT DISTINCT(floors.id) FROM floors
    INNER JOIN societies ON societies.id = floors.societies_id
    INNER JOIN resident_floors ON resident_floors.floors_id = floors.id
    WHERE societies.id = 1
    AND floors.status = 'Y'
)

Можно ли использовать этот запрос или его можно улучшить ..?

1 Ответ

1 голос
/ 15 октября 2019

Похоже, вы хотите получить все этажи, которых нет в resident_floors. Для этого мы можем оставить соединение RF в и запросить только те строки, в которых соединение не удалось, что приведет к нулю в RF:

SELECT floors.* FROM floors
INNER JOIN societies ON societies.id = floors.societies_id
LEFT JOIN resident_floors ON resident_floors.floors_id = floors.id
WHERE societies.id = 1
AND floors.status = 'Y'
AND resident_floors.floors_id IS NULL
...