[gl-como] Ripassino di MySQL

Riccardo (SCASI) r.penco@scasinet.com
Ven 12 Ott 2007 15:19:59 CEST


Jio ha scritto:
> Hergh... è un pò che non mi diletto con le query e la memoria vacilla. 
> Ho provato a googlare in giro, ma mi sa che non ricordo proprio come 
> fosse la questione.
> Scenario: ho una tabella t1 con i campi: ID, c1, c2, c3  ed una tabella 
> t2 con gli stessi campi, ora voglio inserire nella tabella t1 i c1, c2, 
> c3 della t2 che non hanno campi corrispondenti in c1 e c2.
> Per trovare le righe che non corrispondono nelle due tabelle uso:
> SELECT c1, c2, c3, c4 FROM `t2` WHERE (c1,c2) NOT IN (SELECT c1,c2 FROM t1)
> che funziona allegramente (so che si può fare anche con un join, ma son 
> quattro valori in croce e questa la capisco meglio)
> 
> Io avevo buttato giù qualcosa così:
> INSER INTO t1 (c1, c2, c3, c4) SELECT c1, c2, c3,  c4 FROM t2 WHERE 
> (c1,c2) NOT IN (SELECT c1,c2 FROM t1)
> 
> ma mysql si lamenta.
> 
> Boh! Già è venerdì e non ho voglia, già son con la testa al birrificio 
> di Lurago stasera, insomma: non mi viene.
> Una birra a chi mi trova la soluzione più elegante ;)
> 

Mi sono venute in mente queste due query.
Non le ho provate e non conosco bene mysql (W PostgreSQL !!), quindi non 
sono sicuro che funzionino.

insert into t1 (c1, c2, c3, c4)
select t2.c1, t2.c2, t2.c3, t2.c4
from t2
   left outer join t1 on t2.c1=t1.c1 and t2.c2=t1.c2
where t1.ID is null

oppure

insert into t1 (c1, c2, c3, c4)
select t.c1, t.c2, t.c3, t.c4
from (
   select c1, c2, c3, c4
   from t2
   where (c1, c2) not in (
     select c1, c2
     from t1 )
   ) t

ciao
riki


Maggiori informazioni sulla lista gl-como