SQL Question

alocurto

Platinum Member
Nov 4, 1999
2,174
0
76
I have two tables in my database, lets call them TableA and TableB. What I want to do is excute a query that adds the rows that doesn't exist in both TableA and TableB into TableA. For example:

Before Query:
TableA
1 George
2 Mark
3 Patrick
4 Martin

TableB
1 George
2 Steve
3 Mike

After Query:

TableA
1 George
2 Mark
3 Patrick
4 Martin
5 Steve
6 Mike


Anyone?
 

CTho9305

Elite Member
Jul 26, 2000
9,214
1
81
insert into tablea (select * from tableb where id not in (select id from tablea))

or somethign like that? sorry, it's been a while ;).
 

alocurto

Platinum Member
Nov 4, 1999
2,174
0
76
I have made a little head way but it still isn't what I was looking for. I found ways to do it with multiple queries but that seems over kill. Someone has to know this!
 

Firus

Senior member
Nov 16, 2001
525
0
0
I think you would need an 'outer join', thats the only way I can think of doing it...I don't really remember how, but I'm sure you will find something pretty easily by googling. That seems like it would be a pretty simple join.
 

sfreeman

Member
Feb 7, 2001
160
0
0
I would do it like this:

insert into tableA
(col1, col2, col3)
(select col1. col2, col3 from tableB
minus
select col1. col2, col3 from tableA);
 

alocurto

Platinum Member
Nov 4, 1999
2,174
0
76
any more ideas?

I am getting an error on the last select: Incorrect syntax near the keyword 'SELECT'. Here is the SQL:

INSERT INTO PRODUCTS (PRODUCTS.product_number, PRODUCTS.family_number, [PRODUCTS.description], PRODUCTS.price, PRODUCTS.delete_flag)
(SELECT PRODUCTS_TEMP.product_number, PRODUCTS_TEMP.family_number, [PRODUCTS_TEMP.description], PRODUCTS_TEMP.price, PRODUCTS_TEMP.delete_flag FROM PRODUCTS_TEMP
MINUS
SELECT PRODUCTS.product_number, PRODUCTS.family_number, [PRODUCTS.description], PRODUCTS.price, PRODUCTS.delete_flag FROM PRODUCTS)
 

alocurto

Platinum Member
Nov 4, 1999
2,174
0
76
This works:
(select product_Number, family_number, description, price, delete_flag FROM PRODUCTS_TEMP WHERE product_Number NOT IN (select product_Number from PRODUCTS))

When I add INSERT INTO PRODUCTS VALUES it does not work. What am I missing? Also, the NOT IN seems very slow. Any ideas?
 

Argo

Lifer
Apr 8, 2000
10,045
0
0
you don't need values clause. just:

insert into tablea (select blah blah ...)
 

alocurto

Platinum Member
Nov 4, 1999
2,174
0
76
I tried that too:

INSERT INTO PRODUCTS (product_Number, family_number, description, price, delete_flag) VALUES
(select product_Number, family_number, description, price, delete_flag FROM PRODUCTS_TEMP WHERE product_Number NOT IN
(select product_Number from PRODUCTS))

No good. I get the following error output:

Server: Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'select'.
Server: Msg 170, Level 15, State 1, Line 3
Line 3: Incorrect syntax near ')'.
 

alocurto

Platinum Member
Nov 4, 1999
2,174
0
76
Bumping before bed, can ANYONE help me? I can't find exactly what I need on google.
 

alocurto

Platinum Member
Nov 4, 1999
2,174
0
76
Now I am trying:

INSERT INTO PRODUCTS(
product_number,
family_number,
description,
price,
delete_flag)
SELECT
product_number,
family_number,
description,
price,
delete_flag
FROM
(select product_number, family_number, description, price, delete_flag FROM PRODUCTS_TEMP WHERE product_Number NOT IN
(select product_number from PRODUCTS))

Still no good.
 

alocurto

Platinum Member
Nov 4, 1999
2,174
0
76
Got it:

INSERT INTO PRODUCTS(
product_number,
family_number,
description,
price,
delete_flag)
SELECT
product_number,
family_number,
description,
price,
delete_flag
FROM
PRODUCTS_TEMP
WHERE (PRODUCTS_TEMP.product_Number NOT IN
(select PRODUCTS.product_number from PRODUCTS))