Performing an UPDATE with Union in SQL Performing an UPDATE with Union in SQL sql sql

Performing an UPDATE with Union in SQL


You do not need a UNION for that - replacing an inner join with a pair of outer ones should do it:

UPDATE cSET c.order_status = 1FROM Customer AS cLEFT OUTER JOIN Order_Web As ow ON c.id = ow.customer_idLEFT OUTER JOIN Order As o ON c.id = o.customer_idWHERE ow.order_filled = 1 OR o.order_filled = 1

You could also use a WHERE EXISTS, like this:

UPDATE cSET c.order_status = 1FROM Customer AS cWHERE EXISTS (    SELECT 1 FROM Order_Web As ow WHERE c.id = ow.customer_id AND ow.order_filled = 1 ) OR EXISTS (    SELECT 1 FROM Order As o WHERE c.id = o.customer_id AND o.order_filled = 1)

If you must use UNION, you can do it as follows:

UPDATE cSET c.order_status = 1FROM Customer AS cWHERE c.id in (        SELECT ow.id FROM Order_Web As ow WHERE ow.order_filled = 1     UNION        SELECT o.id FROM Order As o WHERE o.order_filled = 1)

or the same one with a JOIN:

UPDATE cSET c.order_status = 1FROM Customer AS cJOIN (        SELECT ow.id AS id FROM Order_Web As ow WHERE ow.order_filled = 1     UNION        SELECT o.id AS id FROM Order As o WHERE o.order_filled = 1) AS ids ON ids.id = c.id


UPDATE  cSET     c.order_status = 1FROM    (        SELECT  customer_id        FROM    order_web        WHERE   order_filled = 1        UNION        SELECT  customer_id        FROM    order        WHERE   order_filled = 1        ) oJOIN    customer cON      c.id = o.customer_id


You can put your union query into a subquery.

update customerc.order_status = 1where id in (union query goes here)