Hallo. ik ben bezig met een muziek database.
De twee tabellen waar het omgaat zijn artiest en cd.
In artiest staat: artiest_naam en artiest_id. In cd staat alleen cd_id.
Deze cd_id uit cd wil ik dus joinen met de artiest_naam uit artiest.
ik heb nu dit:
SELECT * FROM cd JOIN artiest ON cd.artiest_id = artiest.artiest_naam
maar dit werkt helaas niet.. Iemand een oplossing?
Maar nu heb je niet gelijk alle genres. Je kan wel een aantal genres oproepen. Om ook echt alle genres te krijgen zul je een aparte query moeten uitvoeren.
En gebruik geen *, maar zet alle velden achter elkaar die je wilt gebruiken.
Maar nu heb je niet gelijk alle genres. Je kan wel een aantal genres oproepen. Om ook echt alle genres te krijgen zul je een aparte query moeten uitvoeren.
Niet nodig, gewoon een LEFT of RIGHT JOIN (afhankelijk van de positie van de tabelnaam in de query) gebruiken en je lost dit probleem snel en eenvoudig op.
create table personen(
id serial primary key,
naam text
);
create table huisdieren(
id serial primary key,
id_persoon bigint references personen (id),
naam text
);
insert into personen (naam) values ('John'), ('Marie');
insert into huisdieren (id_persoon, naam) values (1, 'Klaas'), (1, 'Kees');
SELECT
personen.naam,
huisdieren.naam
FROM
personen
LEFT JOIN huisdieren ON personen.id = huisdieren.id_persoon;
Resultaat:
"John";"Klaas"
"John";"Kees"
"Marie";"<NULL>"
Marie heeft geen huisdieren maar wordt keurig genoemd in de lijst met resultaten. Waarom? Omdat er sprake is van een LEFT JOIN tussen personen en huisdieren: Neem een record aan de linkerkant van de JOIN en zoek daar (indien mogelijk) een passend huisdier bij. "lege" resultaten worden als een NULL weergegeven.
Bij een INNER JOIN (ook wel als JOIN geschreven) of een RIGHT JOIN, zal alleen John met zijn huisdieren worden genoemd, er kunnen geen bijpassende records voor Marie worden gevonden. Met de volgende query draai je de boel om:
SELECT
personen.naam,
huisdieren.naam
FROM
huisdieren
RIGHT JOIN personen ON personen.id = huisdieren.id_persoon;
Nu wordt eerst de tabel huisdieren genoemd in de FROM en dan aan de rechterkant van de JOIN (RIGHT JOIN) staat de tabel personen. En nu krijgen we weer dezelfde resultaten als bij de eerste SELECT-query met personen links en een LEFT JOIN.
Beetje duidelijk zo? Ga er eens mee spelen, kun je een hoop van leren.