Inkoppertje, dat is makkelijk met INSERT INTO SELECT en SELECT INTO.
Maar wat nou als de info uit meerdere tabellen moet komen (onafhankelijke tabellen, want je wil iets in de koppeltabel zetten) en één van de twee resultaten heeft meerdere resultaten?
Men neme deze opzet:
Stel ik maak een persoon en zijn specialiteit aan, en ik koppel die daarna:
Dat werkt prima.
Maar, nu weet ik niet of de aangeleverde naam bij specialiteit nu de categorienaam, de specialiteitnaam of -code is.
De laatste twee kan makkelijk door de tweede SELECT aan te passen:
Aannemende dat de categorieëntabel al gevuld is, en is gekoppeld met specialiteiten had ik dit bedacht voor de SELECT (voor als de aangeleverde naam die van de categorie is)
Dat werkt ook wel leuk, tenzij de categorie meerdere specialiteiten heeft. Dan krijg ik ineens meerdere resultaten uit de query en gaat de insert mis.
Ik wil wel dat dan voor alle items uit die query (dus voor alle specialiteiten in een categorie) een item wordt gemaakt in de koppeltabel.
Hoe moet ik dit aanpassen om dit werkend te krijgen? Ik kom er niet uit
Maar wat nou als de info uit meerdere tabellen moet komen (onafhankelijke tabellen, want je wil iets in de koppeltabel zetten) en één van de twee resultaten heeft meerdere resultaten?
Men neme deze opzet:
Personen | Koppel1 | Specialiteiten | Koppel2 | Categorieen |
---|---|---|---|---|
userID naam ... | userID specialiteitID | specialiteitID naam code | specialiteitID categorieID | categorieID naam |
Stel ik maak een persoon en zijn specialiteit aan, en ik koppel die daarna:
SQL:
1
2
3
4
5
6
7
8
| INSERT INTO `Personen`(`naam`) VALUES('Jantje Klaassen') INSERT INTO `Specialiteiten`(`naam`, `code`) VALUES('Lopen', 'LO') /* Ik weet de ID's niet, in de praktijk worden meerdere personen en specialiteiten tegelijk aangemaakt, dus LAST_INSERTED_ID() werkt niet */ INSERT INTO `Koppel1`(`userID`, `specialiteitID`) VALUES ( (SELECT `userID` FROM `Personen` WHERE `naam` = 'Jantje Klaassen'), (SELECT `specialiteitID` FROM `Specialiteiten` WHERE `naam` = 'Lopen') ) |
Dat werkt prima.
Maar, nu weet ik niet of de aangeleverde naam bij specialiteit nu de categorienaam, de specialiteitnaam of -code is.
De laatste twee kan makkelijk door de tweede SELECT aan te passen:
SQL:
1
| SELECT `specialiteitID` FROM `Specialiteiten` WHERE `naam` = 'Lopen' OR `code` = 'Lopen') |
Aannemende dat de categorieëntabel al gevuld is, en is gekoppeld met specialiteiten had ik dit bedacht voor de SELECT (voor als de aangeleverde naam die van de categorie is)
SQL:
1
2
3
| SELECT `specialiteitID` FROM `Specialiteiten` WHERE `naam` = 'Lopen' OR `code` = 'Lopen' OR `specialiteitID` IN (SELECT `specialiteitID` FROM `Koppel2` INNER JOIN `Categorieen` USING (categorieID) WHERE `Categorieen`.`naam` = 'Lopen') |
Dat werkt ook wel leuk, tenzij de categorie meerdere specialiteiten heeft. Dan krijg ik ineens meerdere resultaten uit de query en gaat de insert mis.
Ik wil wel dat dan voor alle items uit die query (dus voor alle specialiteiten in een categorie) een item wordt gemaakt in de koppeltabel.
Hoe moet ik dit aanpassen om dit werkend te krijgen? Ik kom er niet uit
[ Voor 193% gewijzigd door F.West98 op 21-12-2013 22:57 ]
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI