Мне часто приходится выбирать значение из одной из двух разных таблиц, tableA и tableB. Если в таблице A существует определенная запись, я беру значение из таблицы A. Если запись не существует, вместо этого мне нужно значение из tableB.
Я работаю с приложением ERP, которое создаст запись на основе событий в таблице адресов доставки заказов на продажу, если пользователь изменит адрес доставки по умолчанию при вводе заказа на продажу. Если пользователь не меняет адрес доставки, система предполагает, что продукт отгружается по адресу, указанному в файле клиента, и ничего не записывает в таблицу доставки заказа на продажу. Мне нужен адрес доставки для каждой отгрузки заказа на продажу, но я не могу безопасно получить его непосредственно из таблицы A или таблицы B.
То, что я делал в прошлом, выглядит примерно так:
SELECT
CASE
WHEN isnull(tableA.SalesOrderNumber, 'StackOverflow') = 'StackOverflow'
THEN tableB.address1
ELSE tableA.address1
END AS address1
Который работает. Но тогда вы в конечном итоге повторяете одно и то же снова и снова для каждого поля с похожей логикой, что отстой, но это не является неработоспособным, если значение, которое вы проверяете (SalesOrderNumber
), является символьными данными и/или первичным ключом. Если значение, которое я проверяю, не является первичным ключом или если это данные числового типа, тогда этот подход становится гораздо более хрупким.
Должен быть лучший способ, верно?
Я пробовал несколько разных подходов с оператором EXISTS
и ничего не добился.