webForumDet fria alternativet

JOIN hit och dit...!

5 svar · 525 visningar · startad av learn

learnMedlem sedan jan. 20051 143 inlägg
#1

Jag lägger ihop flera tabeller i en och samma query men tycker det borde gå att förbättra.

Följande fungerar som jag vill

SELECT k.kontoID, a.namn, u.adress
FROM konto k
LEFT JOIN anvandare a ON a.objektID IN
(
	SELECT objektID FROM objekt_konto ok WHERE ok.kontoID = k.kontoID
)
LEFT JOIN uppgifter u ON u.objektID IN
(
	SELECT objektID FROM objekt_konto ok WHERE ok.kontoID = k.kontoID
)

Eftersom båda joinarna spelar mot samma villkor så borde det väl gå att slå ihop på något sätt. Eller?

Följande fungerar ju naturligtvis inte

SELECT k.kontoID, a.namn, u.adress
FROM konto k
LEFT JOIN anvandare a
LEFT JOIN uppgifter u
ON a.objektID AND u.objektID IN
(
	SELECT objektID FROM objekt_konto ok WHERE ok.kontoID = k.kontoID
)

Men kanske med någon justering... Hur kan man göra?

learnMedlem sedan jan. 20051 143 inlägg
#2

På något sätt borde det väl gå att effektivisera?? Känns så himla onödigt att behöva köra SAMMA subquery flera flera flera gånger:

SELECT k.kontoID, a.namn, u.adress, l.namn, s.namn, g.namn
FROM konto k
LEFT JOIN anvandare a ON a.objektID IN
(
	SELECT objektID FROM objekt_konto ok WHERE ok.kontoID = k.kontoID
)
LEFT JOIN uppgifter u ON u.objektID IN
(
	SELECT objektID FROM objekt_konto ok WHERE ok.kontoID = k.kontoID
)
LEFT JOIN land l ON l.objektID IN
(
	SELECT objektID FROM objekt_konto ok WHERE ok.kontoID = k.kontoID
)
LEFT JOIN stad s ON s.objektID IN
(
	SELECT objektID FROM objekt_konto ok WHERE ok.kontoID = k.kontoID
)
LEFT JOIN gata g ON g.objektID IN
(
	SELECT objektID FROM objekt_konto ok WHERE ok.kontoID = k.kontoID
)

Tabellnamnen är endast exempel.

Hur kan man göra?? Tacksam för hjälp :)

Peter SMedlem sedan dec. 20025 484 inlägg
#3
SELECT k.kontoID, a.namn, u.adress, l.namn, s.namn, g.namn
FROM konto k
left join objekt_konto ok on k.kontoid = ok.kontoid
left join anvandare a on a.objektid = ok.objektid
LEFT JOIN uppgifter u ON u.objektID = ok.objektid
LEFT JOIN land l ON l.objektID = ok.objektid
LEFT JOIN stad s ON s.objektID = ok.objektid
LEFT JOIN gata g ON g.objektID = ok.objektid
learnMedlem sedan jan. 20051 143 inlägg
#4

Tack för ditt svar Peter S men det där går nog inte. Eftersom objekt_konto innehåller flera objektID per kontoID. I ditt exempel hämtas väl bara ut ett objektID där kontoID har ett visst värde.

Varje "undertabell" (anvandare, uppgifter, land, stad, gata) har ett eget unikt objektID. Alltså behöver jag hämta alla objektID som tillhör kontoID från objekt_konto...

Det är därför jag gör en subquery.

Kanske tänker jag fel, men jag tror jag är på rätt spår.

Kan inte joinarna dela på en subquery på något sätt??

learnMedlem sedan jan. 20051 143 inlägg
#5

Hallå?

BrimbaMedlem sedan dec. 19992 966 inlägg
#6

Jag är inne på samma spår som peter.
Jag förstår inte riktigt hur din databas ser ut, eller vilket resultat du vill uppnå. I detta fall vore det bra om du kunde posta lite DDL och testdata

Skulle detta fungera?

SELECT k.kontoID, a.namn, u.adress, l.namn, s.namn, g.namn
FROM konto k
INNER JOIN objekt_konto ok ON ok.kontoID = k.kontoID
LEFT JOIN anvandare a ON a.objektID = ok.objektId
LEFT JOIN uppgifter u ON u.objektID = ok.objektId

På något sätt känns det som att det du vill göra är en inner join mot objekt_konto

128 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
126 ms — hämta tråd, inlägg och bilagor (db)