2017-07-05 76 views
-1

它看起來在這個例子愚蠢的,但這裏是我想做的事:插入有兩個選擇和比較

TABLE_A:

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

表-B:

id first_name 
10 John 

Table_c:

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

我得到所有的f ULL的名字,是不是已經在c和滿足這樣的條件:

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

從查詢結果應該與表-B的ID(fk_b_id)插入到表-A在一起。所以我需要在Table_a的full_name和Table_b的first_name之間進行比較以獲得正確的fk。我可以做比較是這樣的:

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

我可以插入從表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() 

編輯:

另外要注意的是,如果你的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