2008-11-30 12 views
8

In SQL Server, posso fare qualcosa di simile:Cross-UPDATE tabella in SQLITE3

UPDATE tbl1 SET col2 = tbl2.col2 
FROM table1 tbl1 INNER JOIN table2 tbl2 ON tbl1.col1 = tbl2.col1 

non ho preso la briga di guardare se questo è parte di nessuno standard SQL o no, e sono sicuro che ci sono altri modi per farlo, ma è sorprendentemente utile.

Ecco il mio problema. Ho bisogno di fare qualcosa di simile in SQL (vale a dire, non una lingua host) con SQLITE3. Può essere fatto?

risposta

19

questo funziona per SQLite:

UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1) 
+0

mi ha salvato la giornata !!! – Odys

+2

non molto utile se hai più colonne che desideri impostare dalla stessa riga nella seconda tabella. – Michael

+2

@ Michael risponde perfettamente alla sua domanda, se hai un problema diverso che desideri risolvere, fai una nuova domanda. –

1

Ho scoperto che questo può essere fatto con INSERT OR REPLACE INTO. Un po 'più verboso dell'equivalente di T-SQL, ma altrettanto utile.

+4

Potete fornire la vostra soluzione? –

+0

@HannesdeJager Controlla la nuova risposta, ho trovato una soluzione. –

0

Per quello che vale, Microsoft SQL Server e MySQL sono gli unici marchi di database che supportano gli aggiornamenti multi-table e la sintassi che ciascuno utilizza non è simile.

Questa funzione non fa parte dello standard SQL. Quindi non sorprende che il supporto per l'aggiornamento multi-table (e delete) sia non standard e non supportato da molte marche.

In ogni caso, sono felice che tu abbia trovato una soluzione che funzioni per il tuo compito.

+0

SQL Server e MySQL combinati non rappresentano una parte molto grande di tutti i database in produzione? Direi almeno due terzi, forse un Oracle è l'altro. Questo commento fa sembrare che la richiesta sia "fuori dal comune", ma in realtà è supportata dalla maggior parte dei database dei prodotti. – Tommy

+0

@Tommy, poiché la sintassi dell'aggiornamento multi-tabella di Microsoft non è compatibile con la sintassi dell'aggiornamento multi-tabella di MySQL, non penso sia giusto raggrupparli insieme. –

1

solo sottolineare post di Geogory Higley: problemi

che ho avuto con UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1) dove si aggiorna colonne in tbl1 che non esistono in TBL2.

vedi post ghepardo in http://sqlite.phxsoftware.com/forums/p/1708/7238.aspx che punta a:

http://www.mail-archive.com/[email protected]/msg27207.html

Il codice è:

insert or replace into foo (id, name, extra) 
select bar.id, bar.name, foo.extra 
from bar left join foo on bar.id = foo.id; 

e questo sembra funzionare correttamente. Sembra che ci siano molti post su siti diversi che raccomandano il primo approccio, quindi è un po 'confuso. Ti suggerirei di testare il tuo output con molta attenzione se usi questo metodo che sembra più veloce e potrebbe funzionare con tabelle abbinate.

+0

"Ho avuto problemi con UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1) dove aggiorna le colonne in tbl1 che non esistono in tbl2. "come puoi aggiornare una colonna nella tabella 1 in una colonna in tbl2 che non esiste in tbl2 ?? questa richiesta non è un po 'non valida? – Tommy