Кто-то может иметь лучший ответ, но это почти так.Вы можете выбрать COALESCE
вместо ISNULL
, который допускает переменное количество аргументов, поэтому вы можете добавить третий вариант, если оба адреса электронной почты и документы по какой-то причине равны NULL.
Все, что следует, простоКомментарий к схеме.У структуры таблицы есть проблема, но я уверен, что вы сейчас пишете код после того, как эти таблицы уже созданы, так что это не обязательно призыв к действию.Вам, вероятно, придется жить с ними такими, какие они есть.
Мой инстинктивный ответ состоял бы в том, чтобы назначить TransactionId дочерним таблицам, потому что они формально не являются сейчас дочерними.Это автономные объекты, на которые ссылается TransactionTable.
Раньше у меня была похожая проблема, когда у меня был ключевой столбец, у которого не было четкого определения, и я в итоге выбрал его.Невозможно создать формальное ограничение / внешний ключ для FileNo в TransactionTable, поскольку FileNo может быть определен для любой из двух таблиц.
(Кстати, ваша проверка status = 'P'
отсутствует в вашем запросе.)
Также, если вы продолжите добавлять новый тип файла после 'E' и 'D', вам придется продолжать расширять запрос на новые таблицы.Таблица файлов некоторой формы с ключевыми полями могла бы быть одним из способов решения этой проблемы.[насколько я знаю, у вас, возможно, уже есть какая-то таблица файлов]
Хотя я не уверен, что вам это поможет.Нет способа улучшить ваш запрос без изменения структуры таблиц.