PDA

Visualizza la versione completa : [SQL] Aiuto per una query


aleqwerty
30-10-2002, 17:40
Ho 2 tabelle: operativo e inlavorazione. Devo inserire nella prima (operativo) i record non presenti nella seconda e cancellare dalla seconda (inlavorazione) i record non presenti nella prima

Ho trvato un testo che riportava una SQL (di selezione) che sembrava utile, ma non riesco a farla funzionre:
SELECT * FROM inlavorazione INL WHERE NOT EXIST (SELECT * FROM operativo OP WHERE INL.campo1=OP.campo1 AND INL.campo2=OP.campo2)

Potete aiutarmi?

Ale

Genius7115
30-10-2002, 18:45
l'istruzione che devi utilizzare è

INSERT INTO OPERATIVO(CAMPO1, CAMPO2, CAMPO3, ...)
SELECT INL.CAMPO1, INL.CAMPO2,.....
FROM OPERATIVO INNER JOIN INL ON INL OPERATIVO.CAMPO1 <> INL.CAMPO1

prova se funziona ora non ricordo bene la sintassi.

Ciao

aleqwerty
31-10-2002, 12:37
Ciao Genius7115,
ho provato questa:

"INSERT INTO Operativo (Data_Richiesta2, Da, Oggetto_e_mail, Folder) SELECT InLavorazione.Data_Richiesta2, InLavorazione.Da, InLavorazione.Oggetto_e_mail, InLavorazione.Folder FROM Operativo INNER JOIN InLavorazione ON InLavorazione Operativo.Da <> InLavorazione.Da;"

Mi da un errore:
Errore di sintassi (operatore mancante) nell'espressione della query 'InLavorazione Operativo.Da <> InLavorazione.Da'


Però non capisco il senso di
InLavorazione ON InLavorazione

Comunque grazie

Ale

Genius7115
31-10-2002, 17:18
:p

Scusami ho mancato un punto

ON INLAVORAZIONE.OPERATIVO

ma aspetta, questa non è la query definitiva che ti occorre è solo la base poi devi strutturarla meglio.

Genius7115
31-10-2002, 17:21
rettifico ancora devi levare INLAVORAZIONE che è stato un errore di battitura ma devi mettere prima il campo di INLAVORAZIONE e poi paragonarlo a quello di OPERATIVO

INNER JOIN INLAVORAZIONE ON INLAVORAZIONE.CAMPO1 <> OPERATIVO.CAMPO1

aleqwerty
31-10-2002, 18:47
Funziona, ma non fa quello che mi serve.
Sicuramente mi sono spiegato male io.
La query che ho usato è questa:

"INSERT INTO Operativo (Data_Richiesta2, Da, Oggetto_e_mail, Folder) SELECT InLavorazione.Data_Richiesta2, InLavorazione.Da, InLavorazione.Oggetto_e_mail, InLavorazione.Folder FROM Operativo INNER JOIN InLavorazione ON (InLavorazione.Data_Richiesta2 <> Operativo.Data_Richiesta2 AND InLavorazione.Da <> Operativo.Da AND InLavorazione.Oggetto_e_mail <> Operativo.Oggetto_e_mail AND InLavorazione.Folder <> Operativo.Folder);"

In pratica io ho una tabella (InLavorazione) che viene riscritta (cioè cancellata e ripopolata) da outlook.
Operativo è una tabella che di fatto è la copia di InLavorazione solo che ha un contatore più altri campi che mi servono per implementare delle pagine asp .
Quindi l'esecuzione della query dovrebbe consentirmi di
1) inserire i nuovi record di InLavorazione e
2) cancellare i record di Operativo non più presenti in InLavorazione.
anche con 2 query diverse.

.... un pò complicato da spiegare

Forse le query che mi servono sono anche più semplici.

Comunque ciao e grazie

Ale

Genius7115
01-11-2002, 22:27
Mi sembra di capire che i record di Inlavorazione vanno copiati tutti in operativo e poi quelli che non sono presenti in Inlavorazione vanno cancellati ma mi sembra uguale a svuotare la tabella Operativo e riempirla con InLavorazione.

Se è cosi crea una query di svuotamento e poi utilizza la query precedente opportunamente ripulita della parte selettiva (INNER JOIN)

Spero di essere stato chiaro.

aleqwerty
05-11-2002, 18:05
Chiarissimo!

Però Operativo contiene un'altro campo (PresaInCarico) che viene modificati dall'utente attraverso delle pagine ASP.
Se cancello e riscrivo la tabella mi perdo tutti i dati del campo PresaInCarico.

Ale

Loading