PDA

View Full Version : [SQL] Non riesco a formulare una query


Alhazred
25-07-2008, 15:25
Situazione: ho una tablla che descrive degli ingredienti con 6 colonne (nome, disponibilità, scadenza, prezzo, soglia, unità di misura), la chiave primaria è la coppia "nome-scadenza". All'interno della tabella possono esserci al più 2 tuple dello stesso ingrediente, le quali differiscono per data di scadenza.

Problema: devo ottenere una tabella con tutti e soli gli ingredienti la cui disponibilità è <= al proprio attributo "soglia".
Se ci fosse una sola tupla per ogni ingrediente sarebbe semplicissimo
SELECT * FROM ingrediente WHERE disponibilita < soglia
se però un ingrediente ha una disponibilità inferiore alla soglia, ma è presente anche una seconda tupla dello stesso ingrediente con disponibilità tale che la somma delle due disponibilità superi la soglia, questo ingrediente non deve comparire nel risultato.

Come posso fare?

Ed_Bunker
25-07-2008, 16:12
SELECT DISTINCT(nome), disponibilità, etc. FROM ingrediente WHERE disponibilita < soglia

magix2003
25-07-2008, 17:20
Non so se la tua soluzione sia corretta. Io farei così:


SELECT ing1.nome
FROM ingrediente as ing1 JOIN ingrediente as ing2 ON ing2.nome = ing1.nome
WHERE ing1.disponibilita < ing1.soglia AND (ing1.disponibilità + ing2.disponibilità) < ing1.soglia


Io suppongo che la soglia sia uguale per tutte le tuple con lo stesso nome di ingrediente...

Alhazred
25-07-2008, 22:04
Ho usato con successo questa query

SELECT * FROM ingrediente
GROUP BY nome
HAVING SUM(disponibilita) <= soglia

gugoXX
26-07-2008, 07:55
SELECT DISTINCT(nome), disponibilità, etc. FROM ingrediente WHERE disponibilita < soglia


Non e' SQL Standard

gugoXX
26-07-2008, 07:56
Ho usato con successo questa query

SELECT * FROM ingrediente
GROUP BY nome
HAVING SUM(disponibilita) <= soglia

Neppure questo e' SQL Standard

Alhazred
26-07-2008, 08:44
Ma lo uso e si dovrà sempre usare su un DB MySQL e funziona.

gugoXX
26-07-2008, 16:54
Ma lo uso e si dovrà sempre usare su un DB MySQL e funziona.

Avevo letto SQL e pensavo fosse un esercizio.