简体   繁体   中英

Sql join and insert if not exists

I have a table called Itemlookup and I want to insert values from two tables. However, I only want to insert it if Itemlookup doesn't have these values. I can insert into the table but if I execute it again, it inserts again. I want to avoid do that.

I have tried using the If not exists, but am not getting any luck. Any help is most appreciated.

Insert into Itemlookup (ItemNumber, Cases, Shift, [TimeStamp])

Select a.ItemNumber, b.CaseCount, a.TimeStamp 
from ItemsProduced a innerjoin     
       MasterItemList b on a.ItemNumber=b.ItemNumber

Try a left join

Insert into Itemlookup (ItemNumber, Cases, [TimeStamp])
Select a.ItemNumber, b.CaseCount, a.TimeStamp 
from ItemsProduced a 
inner join MasterItemList b on a.ItemNumber = b.ItemNumber
left join Itemlookup i on i.ItemNumber = a.ItemNumber
                      and i.Cases= b.CaseCount
                      and i.TimeStamp = a.TimeStamp 
where i.ItemNumber is null

BTW your insert contains 4 columns and your select only 3. I removed Shift for consistency.

If you're interested, here is the correct way to use NOT EXISTS (also removing "Shift" as juergen did):

Insert into Itemlookup (ItemNumber, Cases, [TimeStamp])
Select a.ItemNumber, b.CaseCount, a.TimeStamp 
from ItemsProduced a 
inner join MasterItemList b on a.ItemNumber = b.ItemNumber
WHERE NOT EXISTS(
  SELECT * FROM Itemlookup 
  WHERE ItemNumber=a.ItemNumber
  AND Cases=b.CaseCount
  AND [TimeStamp]=a.TimeStamp
)
Insert into Itemlookup (ItemNumber, Cases, Shift, [TimeStamp])
Select a.ItemNumber, b.CaseCount,ColumnName, a.TimeStamp 
from ItemsProduced a innerjoin     
       MasterItemList b on a.ItemNumber=b.ItemNumber
where a.ItemNumber NOt In (Select T.ItemNumber From Itemlookup T)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM