Supponiamo un tavolo fruits
che assomiglia a questo:Mysql: dati Swap per i diversi filari
------------------------------------------
| id | name | color | calories |
------------------------------------------
| 1 | apple | red | 20 |
| 2 | orange | orange | 10 |
| 3 | grapes | green | 5 |
| 4 | bananas | yellow | 15 |
| 5 | plum | purple | 25 |
------------------------------------------
Come posso di swap i valori di una riga, con un altro, lasciando intatto il numero di identificazione?
Esempio:
SWAP ROW WITH ID "5" WITH ROW WITH ID "2"
Risultato:
------------------------------------------
| id | name | color | calories |
------------------------------------------
| 1 | apple | red | 20 |
| 2 | plum | purple | 25 |
| 3 | grapes | green | 5 |
| 4 | bananas | yellow | 15 |
| 5 | orange | orange | 10 |
------------------------------------------
Si noti che tutti i valori sono intatte, tranne per l'id. Ho bisogno di fare questo con una lista di valori molto ampia, quindi ho bisogno di un one-liner, o al massimo, qualcosa che non richieda la creazione di tabelle temporanee, e cose del genere.
Nota: id è unico
Grazie
come qualsiasi altra operazione di scambio in quasi tutti gli altri linguaggi di programmazione. copia i dati del record n. 1 nella memoria temporanea, copia i dati del record n. 2 nella registrazione n. 1. quindi copia i dati dalla memoria temporanea nella registrazione n. 2. Non esiste un'operazione di 'swap' incorporata in SQL per fare ciò che vuoi in una singola query ordinata. –
o scrivi uno script che faccia la stessa cosa (come il commento di @MarcB) – Sai
La memoria temporanea potrebbe essere una nuova riga nella tabella? Devo assicurarmi che la riga sia cancellata quando l'operazione di copia è terminata, sebbene –