Archief - twee INNER JOIN's op eenzelfde tabel

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Bram

Legacy Member
Harro

Ik probeer iets te doen in MySQL waarvan ik weet dat het mogelijk is, alleen ben ik precies de syntax vergeten en ik vind het niet direct terug op Google, dus bij deze: 9lives to the rescue.

Ik heb het volgende: een tabel met een LeerlingAccountID en LeerkrachtAccountID (die koppelt welke leerkracht aan welke leerling les geeft). Er is een account tabel met alle accounts (van zowel leerlingen als leerkrachten).

Ik moet dus iets doen in de aard van

Code:
SELECT * FROM bijles
INNER JOIN account ON BijlesLeerkrachtAccountID = AccountID
INNER JOIN account ON BijlesLeerlingAccountID = AccountID

Maar da marcheert niet : Column 'AccountID' in on clause is ambiguous


Dacht ff dak het gevonden had in de vorm van
Code:
SELECT * FROM bijles
INNER JOIN account AS LeerkrachtAccount ON BijlesLeerkrachtAccountID = LeerkrachtAccount.AccountID
INNER JOIN account AS LeerlingAccount ON BijlesLeerlingAccountID = LeerlingAccount.AccountID
Maar nu krijgk enkel m'n Leerling account :/

Bram

Legacy Member
Oldskooler zei:
Spilts ze op en gebruik een union?

Moet eerlijk toegeven dak da nog nooit gedaan heb, kunde mijn query omtoveren tot een voorbeeld?

Edit: syntax gevonden. Nu krijg ik dubbele resultaten en da's nie echt wat ik nodig heb. Kheb het al ooit gezien met zo twee inner joins (dacht ik).

Oldskooler

Legacy Member
Dit eens proberen:

SELECT DISTINCT *
FROM
(
SELECT * FROM bijles
INNER JOIN account ON BijlesLeerkrachtAccountID = AccountID
Union
SELECT * FROM bijles
INNER JOIN account ON BijlesLeerlingAccountID = AccountID
) LESSEN

Dat haalt dubbels er uit.

Ken zelf mysql niet echt, maar zou normaal hetzelfde moeten zijn min of meer.

GivenToFly

Legacy Member
Laat die nested queries maar achterwege. Dit kan inderdaad gewoon door twee keer te joinen op dezelfde tabel en de gejoinde tabellen een alias te geven (met as). Je moet dan natuurlijk ook wel die aliassen gebruiken in je te selecteren velden (gewoon * gebruiken is trouwens meestal geen goed idee).

Bv. om de namen van leerling en leerkracht te selecteren:
Code:
SELECT
	leerling.naam as leerling,
	leerkracht.naam as leraar
FROM
	bijles
	INNER JOIN
		account AS leerling
	ON
		bijles.BijlesLeerlingAccountID = leerling.AccountID
	INNER JOIN
		account AS leerkracht
	ON
		bijles.BijlesLeerkrachtAccountID = leraar.AccountID

Oldskooler

Legacy Member
Mja ok, lol.
Ik dacht dat hij gewoon een onder elkaar alles opgesomde lijst wilde zien, aangezien hij met * begon.

Natuurlijk wilt hij zien welke leerling met welke leerkracht is verbonden en niet plat alles onder elkaar, en is het natuurlijk maar de kwestie van de juiste argumenten na de select te gebruiken.

In Oracle zou hij trouwens alle informatie gekregen hebben geloof ik, dus alle kolommen van beide tabellen met aliassen verzonnen door oracle zelf. Mysql doet dat blijkbaar niet.
Daarom nog de extra verwarring.

Bram

Legacy Member
Merci voor de antwoorden!

Ik weet dat het normaal niet de bedoeling is dat je * gebruikt, maar m'n tabellen zijn zo belachelijk eenvoudig, dat ik het toch maar gebruikte.

QuietKillah

Legacy Member
lukt et niet zo?

SELECT * FROM bijles
INNER JOIN account as join1 ON BijlesLeerkrachtAccountID = AccountID
INNER JOIN account as join2 ON BijlesLeerlingAccountID = AccountID


kdacht dat ge ze gewoon moest een afzonderlijke naam geven als ik het goed heb?

EDIT: dit antwoord stond hier blijkbaar al :p
sorry :D
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan