使用Union执行更新

时间:2013-08-29 22:21:26

标签: mysql union

我有这份工会声明:

(SELECT id FROM bby_venta_co WHERE nom_agrupacion = 'CAFE NESCAFE' 
AND promocion_id = 100000189 
AND ticket_id = 156 
AND fondo_fijo_id = 14 
AND caja_id = 1 ORDER BY costo DESC LIMIT 1)
UNION ALL
(SELECT id FROM bby_venta_co WHERE nom_agrupacion = 'CAFE INTERNA' 
AND promocion_id = 100000189 
AND ticket_id = 156 
AND fondo_fijo_id = 14 
AND caja_id = 1 ORDER BY costo DESC LIMIT 1);

给我带来两行(214,158),我需要这些信息来执行我的更新

UPDATE bby_venta_co SET tupla_usada = 1 WHERE id in(214,158); 

但是当我尝试使用子查询时,我会收到UNION字的语法错误。

我可以将Update查询与Union语句混合使用吗?或者我可能需要使用两个查询来获得我的成就吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

UNION不适用于子查询,但适用于查询。只需省略SELECT s周围的括号。

您应该能够将整个查询SELECT ... UNION SELECT ...用作子查询,然后将其括在括号中。

order by不能用于联合的单个查询,而只能用于联合结果。因此以下不起作用:

UPDATE bby_venta_co SET tupla_usada = 1 WHERE id in(
    SELECT id FROM bby_venta_co WHERE nom_agrupacion = 'CAFE NESCAFE' 
    AND promocion_id = 100000189 
    AND ticket_id = 156 
    AND fondo_fijo_id = 14 
    AND caja_id = 1 ORDER BY costo DESC LIMIT 1
    UNION ALL
    SELECT id FROM bby_venta_co WHERE nom_agrupacion = 'CAFE INTERNA' 
    AND promocion_id = 100000189 
    AND ticket_id = 156 
    AND fondo_fijo_id = 14 
    AND caja_id = 1 ORDER BY costo DESC LIMIT 1
); 

由于您在这里只使用了两个单值,因此两个带OR的子选项应该可以正常工作,完全避免使用UNION

UPDATE bby_venta_co SET tupla_usada = 1 WHERE id =
    (SELECT id FROM bby_venta_co WHERE nom_agrupacion = 'CAFE NESCAFE' 
    AND promocion_id = 100000189 
    AND ticket_id = 156 
    AND fondo_fijo_id = 14 
    AND caja_id = 1 ORDER BY costo DESC LIMIT 1)
  OR id =
    (SELECT id FROM bby_venta_co WHERE nom_agrupacion = 'CAFE INTERNA' 
    AND promocion_id = 100000189 
    AND ticket_id = 156 
    AND fondo_fijo_id = 14 
    AND caja_id = 1 ORDER BY costo DESC LIMIT 1)
;