Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Update statement

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    22

    Update statement

    Salve a tutti,
    sto provando ad eseguire il seguente statement, ma senza successo:

    UPDATE table SET x = 1 WHERE id IN (SELECT MAX(id) FROM table WHERE y=1)

    Mi spiego meglio. Ho la tabella 'table' con attributi 'id', 'x', 'y'.
    Voglio settare x = 1 ma solo per l'ultima tupla tra quelle per le quali y=1; cioè, se ho
    (id x y)
    1 0 1
    2 0 1
    3 0 0
    4 0 1
    l'update dovrà aggiornare solo la tupla (4 0 1) rendendola (4 1 1).

    In cosa sto sbagliando?
    Grazie a tutti in anticipo.

  2. #2
    1. che db usi (sai, il regolamento...)
    2. se esegui SELECT MAX(id) FROM table WHERE y=1 cosa ottieni?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    22
    Quote Originariamente inviata da optime Visualizza il messaggio
    1. che db usi (sai, il regolamento...)
    2. se esegui SELECT MAX(id) FROM table WHERE y=1 cosa ottieni?
    Pardon... Uso MySQL e la query al punto 2 restituisce, correttamente, il valore 4

  4. #4
    anche se l'apparenza è corretta, pare che in mySQL non si poZZa fare http://www.linuxtopia.org/online_boo...ry-errors.html

    forse ci vuole un mysql-aro più esperto

  5. #5
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    anch'io non sono assolutamete mysql-aro

    pero se il tuo id è un campo chiave ( come suggerisce il nome ) allora
    la sottoquery "(SELECT MAX(id) FROM table WHERE y=1)"
    restituisce solamente 1 record

    e comunque anche se id NON fosse chiave restituirebbe solamente 1 valore

    quindi puoi sostituire la IN con un =
    codice:
    UPDATE table SET x = 1 WHERE id = (SELECT MAX(id) FROM table WHERE y=1)
    prova .....

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    22
    Avevo provato sia con IN che con =, ma niente.
    Ho risolto ordinando in modo decrescente e usando LIMIT 1.
    Purtroppo, anche se all'apparenza corretta, la query così come da me pensata e da te proposta non ha effetto.
    Grazie a tutti cmq!

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.