webForumDet fria alternativet

SQL. Fråga.... FROM [table] WHERE ...

3 svar · 186 visningar · startad av angelica

angelicaMedlem sedan juli 2013277 inlägg
#1

SQL = "SELECT l.intID, l.strName, l.intMapIndex, l.strText " _
& ", (SELECT COUNT(*) FROM [artists] a WHERE a.intLocationID = l.intID)" _
& ", (SELECT COUNT(*) FROM [artists] a WHERE a.intLocationID = l.intID AND a.bolView = TRUE AND l.bolView = TRUE ) " _
& " FROM [location] l WHERE " _
& ", (SELECT COUNT(*) FROM [artists] a WHERE a.intLocationID = l.intID AND a.bolView = TRUE AND l.bolView = TRUE ) > 0 " _
& " AND l.bolView = TRUE ORDER BY l.strName"

***
Jag har problem med den markerade raden. Kan man inte räkna poster på det viset och ta med de som är mer än 0?

angelicaMedlem sedan juli 2013277 inlägg
#2

Om man tar bort kommatecknet i början av raden så fungerar det! :-)

SQL = "SELECT l.intID, l.strName, l.intMapIndex, l.strText " _
& ", (SELECT COUNT(*) FROM [artists] a WHERE a.intLocationID = l.intID)" _
& ", (SELECT COUNT(*) as tmpCounter FROM [artists] a WHERE a.intLocationID = l.intID AND a.bolView = TRUE AND l.bolView = TRUE ) " _
& " FROM [location] l WHERE " _
& " tmpCounter > 0 " _
& " AND l.bolView = TRUE ORDER BY l.strName"

Denna varianten känner jag skulle vara lite snyggare.... men det fungerar inte.

Microsoft JET Database Engine error '80040e10'
No value given for one or more required parameters.
/vako_cms/admin/location/listan.asp, line 42

Men å andra sidan!! Denna gången kan jag leva med lite sunkig kod. Viktigare är att det fungerar!

aasahMedlem sedan mars 20033 451 inlägg
#3

angelica skrev:

Om man tar bort kommatecknet i början av raden så fungerar det! :-)

Om du ändrade dina radbrytningar så att de inleds (inte avslutas) med SQL:s kodord skulle koden bli lättare att läsa, också för dig själv tror jag:

SQL = "SELECT l.intID, l.strName, l.intMapIndex, l.strText " _
& ", (SELECT COUNT(*) FROM [artists] a WHERE a.intLocationID = l.intID)" _
& ", (SELECT COUNT(*) FROM [artists] a WHERE a.intLocationID = l.intID AND a.bolView = TRUE AND l.bolView = TRUE ) " _
& " FROM [location] l " _
& "WHERE (SELECT COUNT(*) FROM [artists] a WHERE a.intLocationID = l.intID AND a.bolView = TRUE AND l.bolView = TRUE ) > 0 " _
& " AND l.bolView = TRUE ORDER BY l.strName"

Då ser du direkt varför den raden inte börjar med kommatecken.

angelica skrev:

SQL = "SELECT l.intID, l.strName, l.intMapIndex, l.strText " _
& ", (SELECT COUNT(*) FROM [artists] a WHERE a.intLocationID = l.intID)" _
& ", (SELECT COUNT(*) as tmpCounter FROM [artists] a WHERE a.intLocationID = l.intID AND a.bolView = TRUE AND l.bolView = TRUE ) " _
& " FROM [location] l WHERE " _
& " tmpCounter > 0 " _
& " AND l.bolView = TRUE ORDER BY l.strName"

Denna varianten känner jag skulle vara lite snyggare.... men det fungerar inte.

Det beror på att tmpCounter inte finns i din yttersta fråga, bara i subuttrycket. Här har du en kolumn som heter tmpCounter:
SELECT COUNT(*) as tmpCounter FROM [artists] a WHERE a.intLocationID = l.intID AND a.bolView = TRUE AND l.bolView = TRUE

Men i den yttre frågan är denna kolumn namnlös:
(SELECT COUNT(*) as tmpCounter FROM [artists] a WHERE a.intLocationID = l.intID AND a.bolView = TRUE AND l.bolView = TRUE ) och kan inte refereras till senare.

Testa att skriva:
SQL = "SELECT l.intID, l.strName, l.intMapIndex, l.strText " _
& ", (SELECT COUNT(*) FROM [artists] a WHERE a.intLocationID = l.intID)" _
& ", (SELECT COUNT(*) as tmpCounter FROM [artists] a WHERE a.intLocationID = l.intID AND a.bolView = TRUE AND l.bolView = TRUE ) as artistCounter" _
& " FROM [location] l " _
& " WHERE artistCounter > 0 " _
& " AND l.bolView = TRUE ORDER BY l.strName"

Om det inte funkar får du mellanlagra uttrycket för artistCounter i en temptabell och joina in den i din fråga. Då om inte förr funkar det.

angelicaMedlem sedan juli 2013277 inlägg
#4

Ah!!
Knivigt, klurigt, lurigt!!
Tack för dina tips! Jag ska tänka på det!

Tack för räknaren där på slutet!

Genererad på 363 ms · cache AV · v20260730165559-full.f96bc7eb