Aggiunta clausola WHERE nella query

lunedì 24 novembre 2008 - 15.37

luxsor Profilo | Guru

Come posso inserire in questa query access, la clausola WHERE per far in modo che il risultato di questa query sia valido per tutti gli immobili che soddisfano la condizione where: cioè
- La query mi deve trovare tutti gli immobili che rispettano la condizione where (contratto, tipologia, prezzo da.. a..)
Prima usavo questa:
SELECT immobile.idimmobile, immobile.prezzo, immobile.contratto, immobile.tipologia, foto.file FROM immobile where immobile.contratto = 'Affitto' and immobile.tipologia = 'Villa' and immobile.prezzo between 0 and 1000

- Poi fa tutti gli immobili trovati mi deve restituire una sola fotografia per quel immobile.

SELECT Q.*
FROM foto AS F INNER JOIN (SELECT idImmobile, MIN(file) AS MinFile FROM foto GROUP BY idImmobile) AS Q ON (F.idImmobile=Q.idImmobile) AND (F.file=Q.MinFile)
ORDER BY Q.idImmobile DESC;

lbenaglia Profilo | Guru

>Prima usavo questa:
>SELECT immobile.idimmobile, immobile.prezzo, immobile.contratto,
>immobile.tipologia, foto.file FROM immobile where immobile.contratto
>= 'Affitto' and immobile.tipologia = 'Villa' and immobile.prezzo
>between 0 and 1000

Aggiungi quella clausola WHERE nella subquery
... SELECT idImmobile, MIN(file) AS MinFile FROM foto WHERE... GROUP BY idImmobile ...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

luxsor Profilo | Guru

Lorenzo intendi così:

SELECT idImmobile, MIN(file) AS MinFile, immobile.contratto, immobile.tipologia, immobile.prezzo
FROM foto
WHERE WHERE contratto = 'Affitto' and tipologia = 'Villa' and prezzo between 0 and 1000
GROUP BY idImmobile

Non funziona.

lbenaglia Profilo | Guru

Prova questa:

SELECT TOP 3 F.idfoto, Q.* FROM (foto AS F INNER JOIN ( SELECT idImmobile, MIN(file) AS MinFile FROM foto GROUP BY idImmobile ) AS Q ON F.file = Q.MinFile AND F.idImmobile = Q.idImmobile) INNER JOIN immobile AS I ON F.idImmobile = I.idImmobile WHERE I.contratto = 'Affitto' AND I.tipologia = 'Villa' AND I.prezzo BETWEEN 0 AND 1000 ORDER BY Q.idImmobile DESC;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

luxsor Profilo | Guru

Con questa query mi restituisce sono una riga, io invece voglio che mi restituisca tutte le righe che rispettano quella condizione.

Perchè quel top 3?

jenga Profilo | Newbie

Credo intendesse così:

SELECT Q.*
FROM foto AS F INNER JOIN
(
SELECT idImmobile, MIN(file) AS MinFile FROM foto
WHERE contratto = 'Affitto' and tipologia = 'Villa' and prezzo between 0 and 1000
GROUP BY idImmobile) AS Q
ON (F.idImmobile=Q.idImmobile) AND (F.file=Q.MinFile)
ORDER BY Q.idImmobile DESC;

La subquery viene prefiltrata secondo i tuoi parametri e la inner join estrae solo le righe corrispondenti dalla tabella foto
--
oggi la mia voglia di lavorare è pari a null

lbenaglia Profilo | Guru

>Con questa query mi restituisce sono una riga, io invece voglio
>che mi restituisca tutte le righe che rispettano quella condizione.
Si vede che non hai 3 righe che soddisfano quella condizione di WHERE

>Perchè quel top 3?
Perché sei tu che hai detto di volere 3 righe
http://www.dotnethell.it/forum/messages.aspx?ThreadID=26868
"Ho bisogno di prelevare 3 record nella tabella Immobili e associare al singolo record i campi delle tabella foto(idfoto, file) corrispondenti a quel immobile.id"


Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

luxsor Profilo | Guru

La Top 3 era per avere solo 3 foto nell'homepage, questa è per la ricerca. Ho sbagliato io a non specificarlo nel messaggio, chiedo scusa.

Però funziona con la query:

SELECT Q.*
FROM foto AS F INNER JOIN
(
SELECT idImmobile, MIN(file) AS MinFile FROM foto
WHERE contratto = 'Affitto' and tipologia = 'Villa' and prezzo between 0 and 1000
GROUP BY idImmobile) AS Q
ON (F.idImmobile=Q.idImmobile) AND (F.file=Q.MinFile)
ORDER BY Q.idImmobile DESC;
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5