Precedente :: Successivo |
Autore |
Messaggio |
Crono Semidio


Registrato: 24/03/05 15:12 Messaggi: 224 Residenza: Trieste
|
Inviato: 27 Mar 2007 17:38 Oggetto: Creare con SQL query basate su altre query |
|
|
Ho un database Access contenente due query di visualizzazione di una tabella, la prima query mostra dei record che soddisfano certe condizioni mentre la seconda mostra tutti i record della tabella tranne quelli che sono stati già visualizzati dalla prima query, con le mie scarse conoscenze di SQL ho scritto le query come segue:
prima query
Codice: |
SELECT Tabella.Campo1, Tabella.Campo2
FROM Tabella
WHERE (((Tabella.Campo1)="xyz") OR ((Tabella.Campo1)="zxy"));
|
seconda query
Codice: |
SELECT Tabella.Campo1, Tabella.Campo2
FROM Tabella
WHERE ((((Tabella.Campo1)="xyz") OR ((Tabella.Campo1)="zxy"))=FALSE);
|
questo esempio semplifica un pò le cose ma in realta la prima query è un elenco di query con condizioni diverse fra loro e la seconda contiene un elenco di condizioni troppo corposo per essere facilmente leggibile, mi servirebbe che qualcuno mi suggerisca come scrivere la seconda query senza copiare l'intero elenco delle condizioni della prima query ma, se è possibile, in modo simile a questo:
Codice: |
SELECT Tabella.Campo1, Tabella.Campo2
FROM Tabella
WHERE (se un campo è già visualizzato dalla prima query non selezionarlo);
|
|
|
Top |
|
 |
SverX Supervisor Macchinisti


Registrato: 25/03/02 12:16 Messaggi: 11810 Residenza: Tokelau
|
Inviato: 27 Mar 2007 17:43 Oggetto: Re: Creare con SQL query basate su altre query |
|
|
Crono ha scritto: | come scrivere la seconda query senza copiare l'intero elenco delle condizioni della prima query |
e copiandolo invece uguale uguale?
Codice: | SELECT Tabella.Campo1, Tabella.Campo2
FROM Tabella
WHERE Tabella.Campo1
NOT IN (qui la prima query) |
(non sono un esperto neanche io, per quello farei così ) |
|
Top |
|
 |
Crono Semidio


Registrato: 24/03/05 15:12 Messaggi: 224 Residenza: Trieste
|
Inviato: 28 Mar 2007 09:43 Oggetto: |
|
|
Purtroppo non funziona, magari fosse così facile |
|
Top |
|
 |
chemicalbit Dio maturo


Registrato: 01/04/05 18:59 Messaggi: 18597 Residenza: Milano
|
Inviato: 28 Mar 2007 10:21 Oggetto: |
|
|
e Codice: | WHERE NOT (((Tabella.Campo1)="xyz") OR ((Tabella.Campo1)="zxy"))); | oppure, per logica boleana,
Codice: | WHERE ( NOT ((Tabella.Campo1)="xyz") AND NOT ((Tabella.Campo1)="zxy")) ) |
?
nota bene: ci sto provando, io non so praticamente niente di SQL
p.s.: Crono ha scritto: | Codice: |
WHERE (((Tabella.Campo1)="xyz") OR ((Tabella.Campo1)="zxy"));
|
seconda query
Codice: | WHERE ((((Tabella.Campo1)="xyz") OR ((Tabella.Campo1)="zxy"))=FALSE); |
| Le parentesi non combaciano:
Manca un aparentesi chiusa (o c'è una parentesi aperta di troppo)
L'ultima modifica di chemicalbit il 28 Mar 2007 14:16, modificato 1 volta |
|
Top |
|
 |
SverX Supervisor Macchinisti


Registrato: 25/03/02 12:16 Messaggi: 11810 Residenza: Tokelau
|
Inviato: 28 Mar 2007 12:45 Oggetto: |
|
|
Crono ha scritto: | Purtroppo non funziona, magari fosse così facile |
effettivamente ho dimenticato che la select che metti nella clausola NOT IN deve selezionare solo Campo1, e non anche il 2... |
|
Top |
|
 |
disturbatore Semidio


Registrato: 25/05/07 15:14 Messaggi: 278 Residenza: pianeta in corso di distruzione
|
Inviato: 25 Mag 2007 18:35 Oggetto: |
|
|
Ciao a tutti,
Crono, dalle nebbie delle mie reminescenze di SQL una soluzione potrebbe essere
Codice: |
select T2.C1, T2.C2
from Tabella T2
where not exists (select 1
from Tabella T1
where <<qui tutte le clausole della prima query (ma con T1)>>)
|
La selection list della sub query può restare vuota (la costante 1) perchè l'azione della clausola "not exists" è solo di permettere o meno a un elemento selezionato dalla query esterna di permanere o meno nell'insieme risultato.
Si potrebbe fare lo stesso mettendo Tabella in join con se stessa, ma se il DBMS che usi la supporta, la clausola "not exists" mi sembra più elegante e probabilmente anche più efficente (ma dipende dall'interprete interno).
Spero che funzioni e che non sia troppo tardi...
A presto |
|
Top |
|
 |
|