aslve,
il nome Audi ripetuto è normale. nel mio archivio ci sono migliaia di auto, anche stessa marca :D
che il nome sia ripetuto, proprio normale non e' :D
la modellazione di questa realta' non e' affatto normalizzata.
SELECT *
FROM dbo.[Auto] a
JOIN dbo.Dettagli_Auto d ON d.id_a = a.id_a
WHERE d.id_accessorio = 44;
... ma non va nè la prima per avere il totale di auto nè la seconda applicando uno o più filtri...
la query di proiezione indicata estrae tutte le auto con i relativi accessori che abbiano un accessorio con id_accessorio = 44 ad esse associato.
NON "conta" niente, proietta "*", quindi tutti gli attributi.
formalmente e' una query corretta, come lo e' anche logicamente per quanto ho indicato come risultato.
se si desidera un "conteggio", allora la proiezione sara' ovviamente diversa e dovra' prevedere ad esempio l'utilizzo della funzione COUNT relativa ad un GROUP BY di {auto}.id_a, {auto}.altro_attributo...
... questa è la query reale: ...
in questi casi, visto che tecnicamente chi voglia aiutare deve ricostruire il "tuo" scenario andando ad inventarsi struttura e dati, e' sempre meglio fornire il codice DDL (il piu' semplificato possibile) e qualche riga di INSERT INTO al fine di ottenere la ricostruzione di uno scenario piu' o meno completo...
in quanto
from auto as a
INNER JOIN Auto_dettagli as b ON a.ID_a=b.id_a
where a.visibilita=@visibilita
AND a.stato <> 0
order by a.ID_a DESC
e' un filtro corretto per ottenere, come prima indicato, TUTTE le righe di Auto_dettagli che siano relezionabili alla tabella Auto, che soddisfino il parametro di @visibilita con stato <> 0.
se non ottieni il risultato desiderato andrebbero rivisti anche "i dati" in quanto formalmente tutto il predicato di cui sopra e' corretto.
in realtà la situazione è più complessa perchè dalla tabella dettaglio io voglio sapere quante auto hanno un id_accessorio=32 e nome_accessorio="airbag". questo perchè l'ID accessorio potrebbe essere 3, e sta per CV (cavalli) ... e voglio fare la where sul valore. ad esempio: ottieni tutte le auto che hanno almeno 200 cavalli. quindi il campo nome_accessorio è una stringa variabile
non ti insulto perche' NON sta bene :D:D:D
da come avevo precedentemente letto prima i tuoi dati, anche se tecnicamente sbagliato,
id_accessorio=32 == nome_accessorio="airbag"
costituiva una relazione univoca
se id_accessorio = 32 puo' poi essere con attributo nome_accessorio = "qualsiasi altra cosa", a questo punto tutta la amodellazione NON ha alcun senso...
id_accessorio = 32 -> nome_accessorio = "airbag TIPOA"
...
id_accessorio = 32 -> nome_accessorio = "airbag TIPOZ"
sarebbe veramente sbagliato una gestione di questo tipo... la modellazione e' realmente impropria...
dici poi, scrivi anche
questo perchè l'ID accessorio potrebbe essere 3, e sta per CV (cavalli) ... e voglio fare la where sul valore. ad esempio: ottieni tutte le auto che hanno almeno 200 cavalli
e poniamo che sia anche "validabile"
quindi
...
where a.visibilita=@visibilita
AND a.stato <> 0
AND d.id_accessorio = 3
AND d.nome_accessorio ????
in questo caso vuoi fare una verifica numerica su una valorizzazione tecnicamente testuale, quindi l'attributo DOVREBBE in questo caso contenere SOLO numeri [diversamente ti vengono sollevate eccezioni], che comporta il cast del valore a numerico e quindi verifica sull'operatore di confronto,
... AND CONVERT(int, d.nome_accessorio) >= @paramNumerico
in altri casi farai invece un confronto con CHARINDEX o altro...
... AND d.id_accessorio = 32 AND
CHARINDEX(d.nome_accessorio,'TIPOZ') > 0 AND...
mi spiace e mi ripeto, la modellazione non e' corretta, e' prona a molteplici errori sia logici che per e nella popolazione dei dati
salutoni romagnoli
--
Andrea
Where is the wisdom? Lost in the knowledge.
Where is the knowledge? Lost in the information.
(T.S.Eliot)
Where is the information? Lost in the data.
Where is the data? Lost in the @%&#@ database.
(Joe Celko)