1

UNIONまたは他の手法を使用して、単一の結果として表示したい2つのテーブルがあります。

このIDフィールドは両方のテーブルに関連しています。

2番目のテーブルには1つのフィールドが欠落しているため、最初のテーブルから欠落している値を想定する必要があります。

以下のサンプルコードは機能しますが、大規模なデータセットの場合は非常に遅くなります。

より効率的な解決策はありますか?

T1:                       T2:
+----+-------+--------+   +----+------+
| id | name  | town   |   | id | name |
+----+-------+--------+   +----+------+
|  1 | Alice | London |   |  1 | Bob  |
|  2 | Alan  | Zurich |   +----+------+
+----+-------+--------+   

望ましい結果:

+----+-------+--------+
| id | name  | town   |
+----+-------+--------+
|  1 | Alice | London |
|  2 | Alan  | Zurich |
|  1 | Bob   | London |
+----+-------+--------+   

サンプルコード:

with T1 as
(
    select * from 
    (
        values
            (1,'Alice','London') ,
            (2,'Alan','Zurich') 
    ) as t (id,name,town)
), T2 as
(
    select * from 
    (
        values
            (1,'Bob') 
    ) as t (id,name)
), T2WithTown as
(
    select t2.id,t2.name,t1.town from T2
    inner join T1 on t2.id=t1.id
)

select id,name,town from T1
union
select id,name,town from T2WithTown
4

3 に答える 3

0

ちょうどこのような:

with T1 as
(
    select * from 
    (
        values
            (1,'Alice','London') ,
            (2,'Alan','Zurich') 
    ) as t (id,name,town)
), T2 as
(
    select * from 
    (
        values
            (1,'Bob') 
    ) as t (id,name)
), T2WithTown as
(
    select t2.id,t2.name,t1.town from T2
    inner join T1 on t2.id=t1.id
)

select id,name,town from T1
union
select T2.id, T2.name, T1.town
from T1
inner join T2 on T2.id = T1.id
于 2012-05-16T16:11:35.107 に答える
0
select id,name, town from t1
union 
select id,name, (select top 1 town from t1 where t1.id=t2.id) from t2
于 2012-05-16T16:23:32.090 に答える
0

サンプル データは、両方のテーブルに個別の値があることを示しています。だから私は好むでしょうUNION ALL

Select ID, Name, Town From T1
UNION ALL
select T2.ID, T2.Name, T1.Town
from T1
INNER JOIN T2 on T2.id = T1.id
于 2012-05-16T16:16:48.093 に答える