2

私はこの連合声明を持っています:

(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);

2 つの行 (214,158) が表示され、更新を実行するにはこの情報が必要です

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

しかし、サブクエリを使用しようとすると、UNION ワードで構文エラーが発生します。

Update クエリと Union ステートメントを混在させることはできますか? それとも、成果を得るために 2 つのクエリを使用する必要がありますか? どんな助けでも感謝します。

4

1 に答える 1

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

ここでは 2 つの単一値を使用するだけなので、完全ORに回避して、2 つのサブセレクトが機能するはずです。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)
; 
于 2013-08-29T22:24:12.307 に答える