开发者

SQL server 2000 insert rows when join does not match

开发者 https://www.devze.com 2023-03-25 23:33 出处:网络
I would simply like to insert rows from a table to another if rows does not exist in the target. How should I code that? with inner join?

I would simply like to insert rows from a table to another if rows does not exist in the target. How should I code that? with inner join? Below is th开发者_高级运维e query which returns rows that match between source and target

 select * from LOG_S1201_REFERENCE_T1 b 
 inner join LOG_S1201_REFERENCE_STAGING_WT5 a on b.OU_ID=a.OU_ID     and
 b.Plant_desc=a.Plant_desc   and  b.workshop=a.workshop              and
 b.SerieNum=a.SerieNum       and  b.Operation_type=a.Operation_type  and
 b.PC10DBName=a.PC10DBName   and  b.SimuDBName=a.SimuDBName          and
 b.ProgramName=a.ProgramName and  b.Calibre=a.Calibre


Copying rows can be done through INSERT SELECT

Need an example?

INSERT INTO new_table (col1, col2, col3)
SELECT col4, col5, col6
FROM old_table
HAVING !(SELECT COUNT(*) FROM new_table WHERE col1 = old_table.col4)


Join the table that has all rows with left join with the table that has some of the rows.

Filter one of the left joined table column with IS NULL

INSERT INTO your_table
select b.* 
from LOG_S1201_REFERENCE_T1 b 
left join LOG_S1201_REFERENCE_STAGING_WT5 a on b.OU_ID=a.OU_ID and b.Plant_desc=a.Plant_desc and b.workshop=a.workshop and b.SerieNum=a.SerieNum and b.Operation_type=a.Operation_type and b.PC10DBName=a.PC10DBName and b.SimuDBName=a.SimuDBName and b.ProgramName=a.ProgramName and b.Calibre=a.Calibre
WHERE a.OU_ID IS NULL


In order to select rows that do NOT match you need to do a left join.

INSERT INTO LOG_S1201_REFERENCE_T1 b2 
SELECT a.* FROM LOG_S1201_REFERENCE_STAGING_WT5 a
LEFT JOIN LOG_S1201_REFERENCE_T1 b ON 
   (b.OU_ID=a.OU_ID 
    AND b.Plant_desc=a.Plant_desc 
    AND b.workshop=a.workshop 
    AND b.SerieNum=a.SerieNum
    AND b.Operation_type=a.Operation_type
    AND b.PC10DBName=a.PC10DBName 
    AND b.SimuDBName=a.SimuDBName
    AND b.ProgramName=a.ProgramName 
    AND b.Calibre=a.Calibre)
WHERE b.OU_ID IS NULL

This will select all rows from a that are not in b which will then be inserted into a.
Afterwards a and b should be identical (except for b rows that are not in a).

0

精彩评论

暂无评论...
验证码 换一张
取 消