Problema nell' aggiunta di un AND nella query

venerdì 12 dicembre 2008 - 01.58

luxsor Profilo | Guru

Ciao a tutti, voglio inglobare a questa query un'altra AND che mi filtra tutti i record che hanno il campo VISIBILE=1
Questa è la query:

SELECT TOP 3 F.idfoto, F.file, 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) ORDER BY Q.idImmobile DESC;

Ho provato a inserire AND visibile=1 prima dell'order By , ma mi genera il seguente errore:
"Errore di sintassi nell'operazione JOIN. "

Come posso fare?


0v3rCl0ck Profilo | Guru

>Ciao a tutti,

Ciao

>voglio inglobare a questa query un'altra AND che
>mi filtra tutti i record che hanno il campo VISIBILE=1
>Questa è la query:
>
>SELECT TOP 3 F.idfoto, F.file, 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)
>ORDER BY Q.idImmobile DESC;
>
>Ho provato a inserire AND visibile=1 prima dell'order By , ma
>mi genera il seguente errore:
>"Errore di sintassi nell'operazione JOIN. "
>
>Come posso fare?

Così ti può andare bene?

SELECT TOP 3 F.idfoto , F.file , Q.* FROM foto F JOIN ( SELECT idImmobile , MinFile = MIN(file) FROM foto -- PUOI METTERLO QUA SE SI RIFERISCE A QUESTA SUB-SELECT WHERE visibile = 1 GROUP BY idImmobile ) Q ON (F.file = Q.MinFile) AND (F.idImmobile = Q.idImmobile) -- OPPURE QUA SE SI RIFERISCE ALLA SELECT PRINCIPALE WHERE F.visibile = 1 ORDER BY Q.idImmobile DESC;

Enjoy It


-------------------------------------------------------------------
Michael Denny
Senior Software Developer
Microsoft Framework (C# ASP.NET VB.NET)
http://blogs.dotnethell.it/Regulator/

luxsor Profilo | Guru

Ciao Michael, ho provato in entrambe le posizioni che mi hai consigliato tu, ma mi da restituisce il seguente errore:

"Nessun valore specificato per alcuni parametri necessari"

Come posso fare?

0v3rCl0ck Profilo | Guru

>Ciao Michael, ho provato in entrambe le posizioni che mi hai
>consigliato tu, ma mi da restituisce il seguente errore:
>
>"Nessun valore specificato per alcuni parametri necessari"
>
>Come posso fare?

Allora cominciamo da capo

Su che database stai effettuanto la query (sql, access, mysql, ...) ?

Qual'è lo scopo della tua query?

-------------------------------------------------------------------
Michael Denny
Senior Software Developer
Microsoft Framework (C# ASP.NET VB.NET)
http://blogs.dotnethell.it/Regulator/

luxsor Profilo | Guru

Il database è access.
Adesso questa query mi estrare dalla tabella immobili gli ultimi 3 immobili inseriti + mi estrae dalla tabella foto una sola foto corrispondente all'immobile.
Esempi se l'ultimo immobile inserito ha 5 foto, mi estrae solo la 1; così per il penultimo e il terzultimo immobile.

Adesso io ho bisogno di filtrare TUTTO QUESTO RISULTATO con una WHERE VISIBILE=1
Questo perchè prima della pubblicazione vera e propria, l'aziende immobiliare deve confermare la pubblicazione.

alx_81 Profilo | Guru

Ciao ragazzi, scusate se mi intrometto.
luxor, dovresti postare la struttura delle tabelle in gioco (CREATE TABLE) così possiamo vedere che succede.
grazie mille.
Ciao!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

luxsor Profilo | Guru

Siccome il Create Table in Access non lo so fare, vi posta l'intero DB.

alx_81 Profilo | Guru

>Siccome il Create Table in Access non lo so fare, vi posta l'intero
>DB.
Allora, io non ti ho cambiato lo schema del db.. ma dovresti a mio avviso guardarti un po' di documentazione per cercare di capire cosa sia la normalizzazione, per capire quali tipi di dato sono adatti per quali campi, e quant'altro. E' solo un consiglio

Ti riallego un db chiamato "dbcorretto" ed ho aggiunto due query per ottenere in maniera più modulare il risultato.
La prima query, che è la "MinIDFotoPerImmobile", ricava la prima foto per l'immobile. Ma attenzione, vado sull'ID della foto, non sul nome, altrimenti la min ti ricava l'elemento primo in ordine alfabetico, che non è necessariamente il primo.
La seconda query è "Risultato", che mette in join l'immobile con la query fatta in precedenza per ottenere il file. Qui ho aggiunto la WHERE sul campo visibile e l'ordinamento.
Spero sia quello che ti serve.

Eccoti intanto una reference sulle forme normali del database:
http://it.wikipedia.org/wiki/Normalizzazione_del_database

Fai attenzione ai campi che tratti come Sì/No. Li hai impostati a text, uno spreco di risorse molto alto e soprattutto un approccio logico scorretto. Se devi mettere un valore 1/0 Sì/No, utilizza il tipo di dato Sì/No o al massimo un numerico che tiene molto meno dei caratteri che ora impieghi ma non sempre usi.

Ciao!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

luxsor Profilo | Guru

Ciao Alex
hai perfettamente ragione!!! purtroppo questo non è un progetto che ho creato io, ma sto dando una mano ad un amico che a sua volta la sta dando ad un altro.
Vedi tu che casino.. quindi non ne vale la pena rismontare tutto..
Io ti ringrazio comunque per i tuoi consigli e la tua disponibilità
Ciao
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