Используя вложенный IFNULL для проверки таблиц по взаимоисключающему пути? - PullRequest
0 голосов
/ 25 июня 2018

У меня есть поле, которое может быть в трех разных таблицах.Первая таблица - это архив;хотя архив предполагается для обновления при изменении полей, существует ненулевая вероятность, что этого не произойдет.Таким образом, я хотел бы найти две другие таблицы, в которых поле является взаимоисключающим (очищается после объединения со второй по третью таблицы).

В моем последнем операторе select после совместного использования внешнего объединения в этих таблицах я предполагаю решить эту проблему, реализовав оператор select следующим образом:

SELECT Field IFNULL(Table2, IFNULL(Table3, Table1))

Цель второго IFNULLв том случае, если по какой-либо причине его не было по какой-либо причине, в архиве могла бы быть информация (указывающая на проблему).

Есть ли более элегантное решение этой проблемы, которое я пропускаю?Я относительно новичок в SQL и как таковой не очень хорошо знаком с лучшими практиками.Я думаю, что эта функция не будет слишком ресурсоемкой из-за того, что уже объединены таблицы 1, 2 и 3, но я не уверен.

Это поле также используется для объединения таблиц, и если его нет в этомтаблица, запись не будет существовать в этой таблице по моим критериям запроса.Мой план состоит в том, чтобы использовать это для нескольких различных полей.

Это в конечном итоге будет в параметризованном подготовленном выражении, используемом для реализации функций поиска во внешнем интерфейсе.

1 Ответ

0 голосов
/ 25 июня 2018

COALESCE() немного элегантнее, чем вложенный IFNULL():

SELECT COALESCE(Table2.field, Table3.field, Table1.field) as Field

Это, вероятно, лучший подход, при условии, что field никогда не будет NULL. Если это допустимое значение, то логика может быть немного более громоздкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...