View Full Version : [SQL] IN con AND
Xalexalex
07-03-2008, 22:06
Ciao a tutti.
Visto che l'operatore IN, in SQL, equivale a tanti a=x OR a=b etc..., mi chiedevo se esistesse un qualcosa che lo rendesse a=x AND a=b... etc...
Lavoro su postgres, quindi se c'è anche solo qualcosa di riservato per questo database, non è un problema.
Grazie,
Alex
Puoi spiegarti meglio per favore?
Se A=X , allora non potra' essere A=B (e neppure A=C, etc.)
In pratica spiegata cosi' non si verificherebbe mai
cdimauro
07-03-2008, 23:01
Ciao a tutti.
Visto che l'operatore IN, in SQL, equivale a tanti a=x OR a=b etc..., mi chiedevo se esistesse un qualcosa che lo rendesse a=x AND a=b... etc...
Lavoro su postgres, quindi se c'è anche solo qualcosa di riservato per questo database, non è un problema.
Grazie,
Alex
Scusami, eh, ma se a = x AND a = b, questo vuol dire soltanto che a = b! :p
Sarebbe, insomma, un doppio controllo inutile, visto che sarebbe sufficiente vedere se a = b, come giustamente ti faceva notare gugoXX.
L'operatore IN, invece (usando l'operatore OR), ha motivo di esistere proprio perché si tratta di effettuare una scelta sulla scorta di un insieme di valori "papabili" e, quindi, diversi l'un l'altro. ;)
Xalexalex
08-03-2008, 12:35
Avete ragionissima :D Ero nell'ordine di idee sbagliato e ho cappellato :D
Vi spiego quello che dovrei fare in dettaglio:
Poniamo di avere due tabelle, una con tutti i tipi di prodotto (salame, mortadella, prosciutto etc :D), e relativo ID.
In un'altra tabella ci sono tutte le salumerie con il loro ID.
In una terza ci sono per ogni riga, un ID di salumeria e un ID di prodotto, di modo che io sappia se ogni salumeria ha il determinato prodotto.
Devo costruire due queries, di modo che mandando che specificando i prodotti (più di uno), possa ricavare tutte le salumerie che hanno
1) Tutti i prodotti elencati - prima query
2) Almeno uno- seconda query
Se può interessare, gli ID dei prodotti sono passati via POST da browser, in un array.
Se c'è un modo elegante per fare tutto questo, è meglio :D
Perdonate la mia ignoranza e grazie ancora :D
Alex
Avete ragionissima :D Ero nell'ordine di idee sbagliato e ho cappellato :D
Vi spiego quello che dovrei fare in dettaglio:
Poniamo di avere due tabelle, una con tutti i tipi di prodotto (salame, mortadella, prosciutto etc :D), e relativo ID.
In un'altra tabella ci sono tutte le salumerie con il loro ID.
In una terza ci sono per ogni riga, un ID di salumeria e un ID di prodotto, di modo che io sappia se ogni salumeria ha il determinato prodotto.
Devo costruire due queries, di modo che mandando che specificando i prodotti (più di uno), possa ricavare tutte le salumerie che hanno
1) Tutti i prodotti elencati - prima query
2) Almeno uno- seconda query
Se può interessare, gli ID dei prodotti sono passati via POST da browser, in un array.
Se c'è un modo elegante per fare tutto questo, è meglio :D
Perdonate la mia ignoranza e grazie ancora :D
Alex
Mi sa che le tue domande non sono ancora quelle che vorresti veramente dire. Comunque
Dette:Prodotto, Salumeria, Listino le tue 3 tabelle
La 2 e' davvero banale.
E' sufficiente che una Salumeria abbia almeno un pezzo in listino tra quelli desiderati, per soddisfare la tua domanda.
Quindi
SELECT DISTINCT idsalumeria FROM listino WHERE idprodotto in (lista comma separated dei tuoi prodotti)
La 1 e' piu' complessa, ma secondo me il modo piu' efficiente e'
SELECT idsalumeria
FROM listino WHERE IDProdotto IN (lista comma separated dei tuoi prodotti)
GROUP BY idsalumeria
HAVING COUNT(*)=(numero dei tuoi prodotti)
Ovvero, restituisco tutte le salumerie che hanno tanti record in listino, considerando solo i tuoi prodotti, quanti sono proprio i tuoi prodotti.
Questo a patto che Listino abbia chiave primaria IDSalumeria,IDProdotto (plausibile direi)
Si potrebbe pensare a query con la NOT EXISTS, ma a pelle secondo me la precedente e' la piu' efficiente.
Con la NOT EXISTS Sarebbe:
SELECT idsalumeria FROM Salumeria
WHERE NOT EXISTS
(SELECT idprodotto FROM Prodotto
WHERE IDProdotto IN (lista comma separated dei tuoi prodotti)
AND IDProdotto NOT IN
(SELECT IDProdotto FROM Listino
WHERE Listino.IDSalumeria=Salumeria.IDSalumeria
)
)
Ovvero: Elencare le salumerie per le quali non esista nemmeno un prodotto, tra quelli tuoi interessati, non presente nel proprio listino
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.