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)