Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Creare con SQL query basate su altre query
Nuovo argomento   Rispondi    Indice del forum -> Software - generale
Precedente :: Successivo  
Autore Messaggio
Crono
Semidio
Semidio


Registrato: 24/03/05 15:12
Messaggi: 224
Residenza: Trieste

MessaggioInviato: 27 Mar 2007 17:38    Oggetto: Creare con SQL query basate su altre query Rispondi citando

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
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11810
Residenza: Tokelau

MessaggioInviato: 27 Mar 2007 17:43    Oggetto: Re: Creare con SQL query basate su altre query Rispondi citando

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ì Wink )
Top
Profilo Invia messaggio privato HomePage
Crono
Semidio
Semidio


Registrato: 24/03/05 15:12
Messaggi: 224
Residenza: Trieste

MessaggioInviato: 28 Mar 2007 09:43    Oggetto: Rispondi citando

Purtroppo non funziona, magari fosse così facile
Top
Profilo Invia messaggio privato
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 28 Mar 2007 10:21    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11810
Residenza: Tokelau

MessaggioInviato: 28 Mar 2007 12:45    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato HomePage
disturbatore
Semidio
Semidio


Registrato: 25/05/07 15:14
Messaggi: 278
Residenza: pianeta in corso di distruzione

MessaggioInviato: 25 Mag 2007 18:35    Oggetto: Rispondi

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
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Software - generale Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi