2017-07-05 10 views
-1

を比較:2選択して挿入し、それはこの例では、愚かに見えますが、ここで私が何をしたいです

Table_a:

id fk_b_id    full_name 
1  [I want '10' here] [I want 'John, Doe' here] 

Table_b:

id first_name 
10 John 

Table_c:

id full_name date 
20 John, Doe 2020-01-01 

私はすべてのf

select distinct full_name 
from Table_c 
where full_name not in (
    select full_name 
    from Table_a) and date > GETDATE() 

クエリからの結果はTable_bのID(fk_b_id)と共にTable_aに挿入されるべきである:Cになっていないと、このような基準を満たすULL名。だから、正しいfkを得るには、Table_aのfull_nameとTable_bのfirst_nameの部分を比較する必要があります。私はこのような比較を行うことができます。

where Table_b.first_name = LTRIM(RTRIM(RIGHT(Table_c.full_name, CHARINDEX(',', REVERSE(Table_c.full_name))-1))) 

私は1つのクエリでテーブルAにすべてのテーブルcからフルネーム(それが基準を満たしている)と、(彼らの最初の名前が一致)表BからのFKを挿入することができます?

答えて

1

確かに、ちょうどテーブルBとC

INSERT INTO Table_a (fk_b_id, full_name) 
SELECT DISTINCT b.id, c.full_name 
FROM Table_c c 
INNER JOIN Table_b b ON b.first_name = LTRIM(RTRIM(RIGHT(c.full_name, CHARINDEX(',', REVERSE(c.full_name))-1))) 
WHERE c.full_name not in (
    select a.full_name 
    from Table_a a) and c.date > GETDATE() 

EDIT間の結合をするためにあなたの条件を使用します。

また、あなたのtable_a.full_name列がNULL値を持つことができれば、NOT INサブクエリはに失敗することに、注意してくださいあなたに期待される結果を与える。使用するように書き直すことをお勧めします。NOT EXISTS

WHERE NOT EXISTS 
    (SELECT * FROM Table_a WHERE Table_a.Full_Name = Table_c.FUll_Name) 
+0

ありがとうございました。 – mdc

関連する問題