webForumDet fria alternativet

Joina tre tabeller

6 svar · 436 visningar · startad av reka1

reka1Medlem sedan sep. 2001650 inlägg
#1

Jag behöver hämta data från tre stycken tabeller.
Nedanstående sats fungerar inte precis som jag tänkt mig. Den hämtar data men blandar ihop värdena huller om buller
så det blir en utskrift som heter duga.

SELECT kund.foretag, kund.id AS idK, koppling_events.id AS idA, koppling_events.status, 
koppling_events.kommentar, koppling_events.firma, 
koppling_events.eventnr, events.id, events.eventdata, events.ar FROM events, kund 
INNER JOIN koppling_events ON kund.id = 
koppling_events.id where kund.foretag LIKE '"&foretag&"%'
 AND events.ar LIKE 
'"&request.form("ar")&"%' AND events.eventdata LIKE  '"&request.form("eventdata")&"%' 
AND koppling_events.status LIKE '"&request.form("status")&"%'

Det jag försöker skapa är en slags relation där kund.id refererar till koppling_events.foretag
sedan vidare från koppling_events.eventnr till events.id, för att hämta ut värden på respektive ställen.

En slags join där tre tabeller sammanflätas alltså

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Du har inget joinvillkor mellan events och kund.

Varför har du ett like-predikat när du söker på år?

reka1Medlem sedan sep. 2001650 inlägg
#3

Jag satte in ett joinvilkor till men jag får det inte att fungera. :-( Jag har testat lite olika kombinationer men icke.

sql = "SELECT kund.foretag, kund.id, koppling_events.firma, koppling_events.eventnr,
 koppling_events.kommentar, koppling_events.status, 
events.id, events.eventdata, events.ar FROM kund INNER JOIN koppling_events ON kund.id = 
koppling_events.firma, 
koppling_events INNER JOIN events ON koppling_events.eventnr = events.id WHERE 
kund.foretag='darec'"

En grej till, i tabellerna koppling_events och events ska allt till höger från kolumnerna man anropar (koppling_events.firma, events.id) hämtas.
Ska man då kanske använda RIGHT join istället? :-/

Angående sökning på år: skriver man 200 så hittas alla event från 2000-2005.

tohaMedlem sedan dec. 1999707 inlägg
#4

nu har du gjort en FULL OUTER JOIN med koppling_events. du joinar in den 2 ggr. Testa det här:

FROM 
kund 
INNER JOIN koppling_events ON kund.id = koppling_events.firma
INNER JOIN events ON koppling_events.eventnr = events.id
reka1Medlem sedan sep. 2001650 inlägg
#5

Tack för svar! Tyvärr blir meddelandet:

Microsoft JET Database Engine error '80040e14'

Syntax error (missing operator) in query expression 'koppling_events.eventnr events.id'.

Sql:en i sin helhet ser nu ut:

SELECT kund.foretag, kund.id, koppling_events.firma, 
koppling_events.eventnr events.id FROM kund 
INNER JOIN koppling_events ON kund.id = 
koppling_events.firma INNER JOIN events ON 
koppling_events.eventnr = events.id WHERE 
kund.foretag='darec'
Engine^Medlem sedan dec. 20003 887 inlägg
#6

Ett missat komma-tecken.
Paranteser inlaggda, eftersom du använder Access.

SELECT T_K.foretag, T_K.id, T_KE.firma, T_KE.eventnr, T_E.id
FROM (kund T_K
INNER JOIN koppling_events T_KE ON T_KE.firma = T_K.id)
INNER JOIN events T_E ON T_E.id = T_KE.eventnr
WHERE T_K.foretag = 'darec'

När jag tittar på detta SQL-uttryck känns det som om jag gjort något galet ;) Det visar sig...

reka1Medlem sedan sep. 2001650 inlägg
#7

Jättetack! Nu verkar det flyta på fint...
OT: att man kan förkorta tabellnamnen som Engine^ gjorde hade jag ingen aning om *tumme upp*

125 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)