私は、2 つのテーブルのレコードを「結合」する必要がある SQL クエリに取り組んでいます。つまり、レコードが table2 に存在する場合はそのレコードを使用し、そうでない場合は table1 の値にフォールバックする必要があります。
この例では、table1 と table2 には 2 つのフィールド (id と説明) しかありませんが、実際にはもっと多くのフィールドがある可能性があります。
ここに小さなテストケースがあります:
create table table1 (id int, description nvarchar(50))
create table table2 (id int, description nvarchar(50))
insert into table1 values (1, 'record 1')
insert into table1 values (2, 'record 2')
insert into table1 values (3, 'record 3')
insert into table2 values (1, 'record 1 modified')
insert into table2 values (2, null)
クエリの結果は次のようになります。
1, "record 1 modified"
2, null
3, "record 3"
これが私が思いついたものです。
select
case when table2.id is not null then
table2.id else table1.id
end as Id,
case when table2.id is not null then
table2.description
else
table1.description
end as Description
-- etc for other fields
from table1
left join table2 on table1.id = table2.id
私が望むものを達成するためのより良い方法はありますか? coalesce
table1の対応する値がnullでない場合、table2からnull値を選択しないため、使用できないと思います。