2010-05-17 10 views
6

Vorrei aggiornare i valori in una tabella in base ai valori corrispondenti delle altre tabelle. Supponiamo di voler aggiornare i prezzi dei pezzi forniti da un produttore specifico il cui nome è nella tabella Manufacturers con la tabella Pieces contenente solo l'ID del produttore.Aggiornare una colonna in base a un campo di un'altra tabella

Ho visto diverse soluzioni per MySQL here e per MS SQL Server here ma nessuno di loro sembra funzionare in SQLite.

Qualche suggerimento?

+3

+1: per intraprendenza. Se solo altri mettano lo stesso impegno nella ricerca delle loro domande ... –

risposta

2

Hai provato qualcosa del genere?

UPDATE Pieces 
SET price = 42 
WHERE manufacturer_id = (
    SELECT id 
    FROM Manufacturers 
    WHERE Name = 'FooBar Inc.' 
) 
+0

Sì, funziona! Grazie. Non dovrebbe essere 'first (id)' nella SELECT nidificata? – Sergio

+0

Ponticelli @OMG: SQLite, non MySQL. Perché non possono essere due aziende denominate "FooBar Inc."? La restrizione di univocità si applica solo al PK (id). – Sergio

+2

@Sergio: Ci scusiamo, ma il punto è relativo a potenziali dati duplicati. Il PK sarebbe l'ID, il nome dovrebbe avere un vincolo univoco supponendo supportato da SQLite. –

0

Per SQLite non esiste alcuna funzionalità JOIN nelle istruzioni UPDATE. L'unica opzione che avete è quello di rendere sottointerrogazioni corellated:

UPDATE pieces 
    SET price = (SELECT SUM(price) 
       FROM manufacturers 
       WHERE pieces.manufacture_id = manufacturers.id) 
WHERE manufacture_id in (SELECT id 
         FROM manufacturers 
         WHERE name IN ('boo', 'foo')); 

che non è molto efficiente, ma è possibile adattarlo alle proprie esigenze.

Problemi correlati