我有这份工会声明:
(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语句混合使用吗?或者我可能需要使用两个查询来获得我的成就吗?任何帮助将不胜感激。
答案 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)
;