Я пытаюсь сделать это как можно меньше.
-
Допустим, у меня есть три таблицы: table1 table2 и table3.У всех этих таблиц есть столбец "organizationID".У меня также есть таблица 0, которая каким-то образом связана со всем этим.
Иногда "organizationID" находится в таблице 1, иногда в таблице 2, иногда в таблице 3.
-
Я делаю что-то вроде этого:
SELECT coalesce(table1.organizationID,coalese(table2.organizationID,coalesce(table3.organizationID,0)))
FROM table0
LEFT JOIN table1 ON (some condition)
LEFT JOIN table2 ON (some condition)
LEFT JOIN table3 ON (some condition)
Это работает.Это дает мне то, что я хочу.Проблема в производительности.База данных всегда выполняет все три объединения, даже если table1 уже имеет orgaizationID.
-
Я хочу изменить этот выбор следующим образом:
SELECT coalesce(table1.organizationID,coalese(table2.organizationID,coalesce(table3.organizationID,0)))
FROM table0
LEFT JOIN table1 ON (some condition)
LEFT JOIN table2 ON (some condition) AND table1.organizationID IS NULL
LEFT JOIN table3 ON (some condition) AND table2.organizationID IS NULL
Проблема в том, что он все еще выполняет все объединения, поэтому для завершения выполнения требуется столько же времени.
Можно ли как-нибудь предотвратить запуск объединений, если предыдущее объединение было успешным?
-
Заранее большое спасибо.
-
РЕДАКТИРОВАТЬ: Соединение table3 занимает много времени для выполнения.Я ничего не могу с этим поделать.Поэтому я хочу избегать присоединения к этой таблице, если мне это не нужно (то есть, если в table1 или table2 уже есть столбец organizationID)