PDA

Visualizza la versione completa : [ACCESS] Query per selezionare più righe


aasmdaa
24-04-2009, 17:42
Ho una tabella fatta così:

codice descrizione valore
10 prima 150
10 seconda 134
10 terza 199
10 quarta 121
11 prima 88
11 seconda 34
11 terza 198
11 quarta 144

Ad esempio quello che voglio fare è selezionare tutti i codici che soddisfino queste condizioni:
prima = 150 e terza = 199
In questa caso dovrei avere come risultato il codice 10.
Se però faccio così:

SELECT codice FROM tabella WHERE valore = 150 e valore = 199

non funziona perchè la stessa riga non potrà avere 2 valori uguali.

Anche facendo così:

SELECT codice FROM tabella WHERE (descrizione = prima AND valore = 150) AND (descrizione = terza AND valore = 199)

Non funziona per lo stesso motivo.

Come potrei fare?

123delphi321
24-04-2009, 21:36
non funzione perche invece di AND devi usare OR

prova cosi:



SELECT
tabella.codice
FROM tabella
WHERE
(descrizione = 'prima' AND valore = 150) or
(descrizione = 'terza' AND valore = 199)


ciao

aasmdaa
25-04-2009, 12:57
Così ovviamente funziona, ma il mio problema è proprio che le 2 condizioni devono essere entrambe vere, mentre così basta che una delle 2 sia vera che risulta vera.

123delphi321
25-04-2009, 13:33
entrambe vere, mentre così basta che una delle 2 sia vera che risulta vera.

...e' vero! :)

ok.

non sono pratico di access, ma mi sembra che permette l'utilizzo delle subquery

prova questo



SELECT
tabella.codice
FROM tabella
where descrizione = 'terza' AND valore = 199
and tabella.codice in (SELECT descrizione = 'prima' AND valore = 150)


ciao... facci sapere

Z0rn
27-04-2009, 18:01
Prendi tutte le righe ma estrai i valori distintiç utilizzi la clausola SELECT DISTINCT


SELECT DISTINCT codice
FROM tabella
WHERE
(valore = 150) or
(valore = 199)

123delphi321
27-04-2009, 18:19
Originariamente inviato da Z0rn
Prendi tutte le righe ma estrai i valori distintiç utilizzi la clausola SELECT DISTINCT


SELECT DISTINCT codice
FROM tabella
WHERE
(valore = 150) or
(valore = 199)


No Zorn, non e' esatto quello che dici, aasmdaa ha bisogno dei codice che hanno sia valore 150 che 199... cioe devono essere presenti entrambi i valori, e con la distinct questo non avverrebbe

aasmdaa
27-04-2009, 18:20
Ho risolto utilizzando la soluzione SELECT IN come indicato da delphi (Grazie 1000!)
In pratica faccio tante SELECT quanti sono i filtri da controllare.

La soluzione indicata da Z0rn invece è sempre un OR e non è quello che cercavo.

La velocità di esecuzione con 6 filtri (il max che ho) è ancora buona su 408500 caratteristiche circa.

Un'altra soluzione forse funziona è quella di utilizzare una query a campi incrociati, che però proverò non appena ho un po' di tempo.

Intanto questa funziona!

Grazie

Z0rn
27-04-2009, 18:55
No scusate, d'accordo che hai risolto, ma io non ho capito. Tu hai una tabella


codice descrizione valore
10 prima 150
10 seconda 134
10 terza 199
10 quarta 121
11 prima 88
11 seconda 34
11 terza 198
11 quarta 144

di questo tipo e vuoi CODICE nel caso in cui CODICE sia uguale per due righe trovate in modo che descrizione="prima" e valore = 150, oppure descrizione ="terza" e valore = 199?
Se e' cosi' mi sembra un po' troppo arzigogolato, potrebbe esserci qualcosa che non funziona sulle strutture dati, no?

aasmdaa
28-04-2009, 10:13
Non oppure ma e:

Mi serve il codice che abbia prima = 150 E terza = 199

La struttura dei dati non la gestisco io direttamente ma ti assicuro che pur essendo complessa è corretta.

Loading