Я делаю соединение между двумя таблицами и хочу выбрать столбцы в зависимости от того, есть ли у них запись или нет. Я стараюсь избегать использования нескольких одинаковых полей и пытаюсь объединить их в отдельные столбцы. Что-то вроде:
Select
id = (CASE WHEN a.id IS NULL THEN b.id ELSE a.id END),
name = (CASE WHEN a.name IS NULL THEN b.name ELSE a.name END)
From Table1 a
Left Join Table2 b
On a.id = b.id
Where a.id = @id
Я бы хотел, чтобы id
заполнял с Table1
, если запись существует, но если нет, извлекайте из Table2
. Предыдущий код не возвращает записей, потому что в Table1
нет значений NULL
, поэтому мой вопрос: как мне проверить, существуют ли какие-либо записи? Также, если кто-то знает, как лучше выполнить то, что я пытаюсь сделать, я ценю руководство и конструктивную критику.
EDIT
Похоже, COALESCE
сработает для того, чего я пытаюсь достичь. Я хотел бы дать немного больше информации о том, с чем именно я работаю, и получить несколько советов о том, использую ли я лучший метод.
У меня раздутый стол Table2
, и он в производстве. Я работаю над созданием новых веб-приложений для этой системы, но не могу оправдать полный редизайн базы данных, поэтому я пытаюсь сделать одно "на лету". Я создал новую таблицу Table1
и пишу хранимые процедуры для следующих методов Get
(Select
), Set
(Update
), Add
(Insert
), Remove
(Delete
). Таким образом, моему коду будет казаться, что я работаю с одной таблицей, которая не является раздутой. Мой код просто вызовет один из методов SP, а затем хранимая процедура обработает данные между старой таблицей и новой. В настоящее время я работаю над методом Get
, и мне нужно проверить старую таблицу Table2
на наличие записи, если она не существует в Table1
.
Благодаря предложениям здесь мой запрос в настоящее время выглядит так:
Select
id = coalesce(a.id, b.student_number),
first_name = coalesce(a.first_name, b.first_name),
last_name = coalesce(a.last_name, b.last_name),
//etc
From Table1 a
Full Outer Join Table2 b
On a.id = b.student_number
Where (a.id = @id Or b.student_number = @id)
Это работает для того, чего я пытаюсь достичь, я хотел бы поделиться с ним опытной толпой за любые советы или предложения, если есть лучшие или более правильные способы сделать это.
Спасибо