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
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