webForumDet fria alternativet
Logga in / Bli medlem

innerjoin-haveri-kaos

Databaser & SQL

4 svar · 183 visningar · startad av udden

Medlem sedan mars 200174 inlägg
Trådstart#1

någon som kan säga om man får göra så här? Dvs select från en inner join som sedan används i nästa inner join?
(får felmeddelande nu, Incorrect syntax near the keyword 'ON')

varje post kan ha flera statuskoder och vill bara ha ut varje post med senaste statuskoden. DISTINCTROW fungerar inte då jag vill ha efter senaste datum...

" SELECT bla bla bla.. FROM (tabell1 INNER JOIN (" &_
"(SELECT TOP 1 * FROM (" &_
"tblOls ols " &_
"INNER JOIN (" &_
"tblSta_sta sta " &_
"INNER JOIN tblSCO_sco sco " &_
"ON sta.intId_sco = sco.intId) " &_
"ON ols.intId_sta = sta.intId " &_
") ORDER BY sta.datDate DESC)) " &_
"ON orp.intId = ols.intId_orp " &_
"ORDER BY sta.datDate, sco.intRank ASC"

Medlem sedan mars 200174 inlägg
#2

eller kan man kanske lösa det så här, i on-villkoret ?

(felmeddelande här också)

"ON ols.intId_sta = sta.intId AND sta.datDate in (SELECT max(datDate) FROM sta WHERE sta.intId = ols.intId_sta) " &_

Medlem sedan mars 200174 inlägg
#3

felmeddelandet:

An aggregate cannot appear in an ON clause unless it is in a subquery contained in a HAVING clause or select list, and the column being aggregated is an outer reference.

vilket jag inte riktigt är med på?

Medlem sedan dec. 200012 464 inlägg
#4

Kan du beskriva vilka tabeller du har, lite datainnehåll och vilket resultat du förväntar dig samt vilken DBMS du använder.

Medlem sedan mars 200174 inlägg
#5

ja ursäkta var lite stressad. är MS SQL. i databaser lagras en order för en artikel, som kan ha flera olika statusrapporter. alltså tabeller för order, status, statuskod och så en del länktabeller... och en massa fler.

Vad jag får ut är alla ordrar på alla artiklar, men flera rader för samma artikel då flera statusrapporter finns till en order. Jag vill endast visa en artikel en gång med SENASTE orderstatusen.

Hoppas det blev tydligare :)

Original-sqlsats som ger multiplar av orderstatusar ser ut så här

strSQL = "SELECT usr.strName AS strName, usr.strEmail AS strEmail, usr.intLevel AS intLevel, orp.intId AS intId_orp, orp.strName AS strTitle,orp.strDescription AS strDesc,orp.intId_artikel AS intId_artikel,orp.floatPrice AS price,orp.intId_ord AS intId_ord,sta.datDate AS datDate,sco.strStatusCode AS strStatus " &_
"FROM (tblOrderP_orp orp " &_
"INNER JOIN (tblUsr_Link_tblOrd_ulo ulo " &_
"INNER JOIN tblUsr_usr usr " &_
"ON ulo.intId_usr = usr.intId) " &_
"ON orp.intId_ord = ulo.intId_ord) " &_
"INNER JOIN (tblOLS_ols ols " &_
"INNER JOIN (" &_
"tblStatus_sta sta " &_
"INNER JOIN tblStatusCode_sco sco " &_
"ON sta.intId_sco = sco.intId) " &_
"ON ols.intId_sta = sta.intId) " &_
"ON orp.intId = ols.intId_orp " &_
"ORDER BY sta.datDate, sco.intRank ASC"

i denna vill jag då använda ngt av det jag skrev ovan, men det lyckas ej...

387 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
127 ms — deklarationer (db)
126 ms — hämta statistik (db)
130 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)