Känns som att du har fel ordning på dina inner join. Kanske bara är jag inte som kan det till 100%. Du har ju en relation mellan h och r, mellan f och r. Borde inte du joina in r före f?
"SELECT f.functionId, f.functionName, f.functionIdentifier, h.hardwareId, h.hardwareName " +
"FROM hardware h " +
"INNER JOIN references r ON h.hardwareId = r.ref_hardware " +
"INNER JOIN functions f ON f.functionId = r.ref_function " +
"WHERE r.ref_manual=" + manualId +
" ORDER BY f.functionName ASC";
Jag kan vara ute och cykla men det skulle vara min gissning.
select
f.functionId,
f.functionName,
f.functionIdentifier,
h.hardwareId,
h.hardwareName
from
`references` as r
inner join
`functions` as f
on f.functionId=r.ref_function
inner join
`hardware` as h
on h.hardwareId=r.ref_hardware
where
r.ref_manual=:manualId
order by
f.functionName asc
Problemet med syntax error kan dock ha att göra med att "references" och "functions" kan vara reserverade ord i din DBMS. Ovanstående kod utgår från MySQL, använder du Access eller SQL Server byter du ut `tabellnamn` mot [tabellnamn].
Jag skulle nog också gissa att problemet ligger i att du använder ett reserverat ord (references). Pröva atta omsluta det ordet med backticks (i MySql): `references`.
Problemet med syntax error kan dock ha att göra med att "references" och "functions" kan vara reserverade ord i din DBMS. Ovanstående kod utgår från MySQL, använder du Access eller SQL Server byter du ut `tabellnamn` mot [tabellnamn].
Ditt förslag ger felmeddelandet:
Syntax error (missing operator) in query expression 'f.functionId=r.ref_function inner join hardware as h on h.hardwareId=r.ref_hardware'.
Det är en Access databas, och jag har testat med hakparenteser och även testat att döpa om tabellerna, men resultatet är detsamma ändå.
Verkar som att references var ett reserverat ord iaf. Vet inte varför det inte slog igenom på en gång när jag bytte namn på tabellen, men nu fungerar det med min ursprungliga query.
Ditt förslag ger felmeddelandet:
Syntax error (missing operator) in query expression 'f.functionId=r.ref_function inner join hardware as h on h.hardwareId=r.ref_hardware'.
Det är en Access databas, och jag har testat med hakparenteser och även testat att döpa om tabellerna, men resultatet är detsamma ändå.
Eh, missade bara en 'as r' i frågan. Koncentrerade mig mer på att innesluta tabellnamnen då jag gissade på att references var ett reserverat ord. ;)
Jag med min ganska begränsade erfarenhet av olika SQL-dialekter har fått för mig att man bör använda AS vid värde-namn, men undvika det vid tabellnamn, alltså:
SELECT b.foo AS myfoo FROM bar b;
För MySQL kvittar det i båda fallen, men jag har något minne av att Oracle ogillar antingen att man använder AS vid tabellalias, eller att man inte gör det vid värdealias. Andra DBMS'er vet jag inget om. Någon som vet säkert får gärna bekräfta eller sparka mig i smalbenet om jag har fel. :)
132 ms totalt · 3 externa anrop · v20260731065814-full.b746b907