私は、データベースDB1でテーブルTab1をを持っている:更新列
col1 | col2
--------------
'abc-1' | 11
'abc-2' | 22
'abc-3' | 33
null | 44
null | 55
私はデータをこのテーブルからCOL1列を更新したいです
col3 | col4 | col5
---------------------
'abc-1' | 1 | 10
'abc-1' | 2 | 10
'abc-2' | 1 | 20
'abc-3' | 1 | 30
'abc-3' | 2 | 30
'abc-3' | 3 | 30
'abc-4' | 1 | 40
'abc-5' | 2 | 60
(COL1内のデータは常にだけCOL3から来ています。)
:列COL3から別のデータベース(DB2)内の別のテーブル( TAB2)からテーブルは2つの中間テーブルDB1によって接続されています。 TAB3:
col6 | col7
----------------
'abc-001' | 11
'abc-002' | 22
'abc-003' | 33
'abc-004' | 44
およびDB2。 TAB4:
今col8 | col9
----------------
10 | 'abc-001'
20 | 'abc-002'
30 | 'abc-003'
40 | 'abc-004'
50 | 'abc-005'
、COL3値は、(ID値によって識別された状態で)繰り返すことができる、これはトリッキーな部分です。 COL1に欠けているすべての値がCOL3に繰り返さないと仮定すると、これは私が列を更新する方法である:
update DB1.Tab1 as T1
inner join
DB1.Tab3 as T3 ON T3.col7 = T1.col2
inner join
DB2.Tab4 as T4 ON T4.col9 = T3.col6
inner join
DB2.Tab2 as T2 ON T2.col5 = T4.col8
set
T1.col1 = T2.col3
where
T1.col1 is null;
また、これは、一般的に繰り返される値のために動作します - しかし、私は唯一のCOL3値がやるときCOL1を更新したいです繰り返さない、つまりこの場合は値abc-2、abc-4、abc-5を使用します。これは私が(アップデートに関連する)単一col3という値を選択する方法である:
select
col3
from
DB2.Tab2 as T2
inner join
DB2.Tab4 as T4 ON T2.col5 = T4.col8
inner join
DB1.Tab3 as T3 ON T4.col9 = T3.col6
inner join
DB1.Tab1 as T1 ON T3.col7 = T1.col2
where
T1.col1 is null
and T1.col2 is not null
group by col3
having count(*) = 1;
質問です:どのように私は繰り返さないcol3という値でCOL3でCOL1を更新していますか?
EDIT。
しかし、すべての空のcol1値は、選択クエリの結果の最初のcol3値のみで更新されます。 where句には何かがないと思うが、適切な条件を立てることはできない。