2017-07-05 74 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