I have two tables products
and product_edits
which hold product information on the pricelist. My app works in a way that if user changes any product info in products
table it inserts it into product_edits
table…
PRODUCTS table
x
pk|code|name |description|price| .
-----------------------------------
1 |QW1X|Product 1|
2 |LW1X|Product 2|
3 |DE1X|Product 3|
PRODUCT_EDITS table
pk|product_id|code|name |description|price| .
-----------------------------------
1 | 2|LW1X|Product 2 new name|
In above case I would like an SQL that returns records from both tables, but if product is found in product_edits
table it selects only from product_edits
and not also from products
table.
I tried using standrd union but selects all records from both tables:
select code, name, description from products
union
select code, name, description from product_edits
Advertisement
Answer
It’s better to use EXISTS
instead of IN
, in this case.
You want the search to stop once you found a match, not go over all of the results from product_edits
.
So do it like this:
SELECT
code, name, description
FROM products p
WHERE NOT EXISTS (SELECT 1 FROM product_edits e WHERE e.code = p.code)
UNION
SELECT
code, name, description
FROM product_edits