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?
Een id is een uniek getal. Dit wordt door de database zelf geregeld.
artiest_naam is een door jou zelf ingevulde naam.

Deze 2 velden hebben geen relatie.

Daarvoor moet je artiest_id gebruiken. En in de tabel CD heb je ook een veld genaamd artiest_id nodig.
dankje, het werkt:)

Nu wil ik het genre_id ook nog joinen aan genre_naam. hiervoor heb ik een tabel Genre met genre_naam en genre_id en in de tabel cd staat ook genre_id.

dus 2 joins in 1 query, hoe moet dat dan?
Gewoon erbij flikkeren. Dit doe je overigens wel goed :)

Laat je query wat je nu hebt eens zien.
Je kan het er inderdaad gewoon bij indoen.. ik was aan het kloten met AND vandaar..

het werkt nu met dit:
 SELECT * FROM cd JOIN artiest ON cd.artiest_id = artiest.artiest_id JOIN genre ON cd.genre_id = genre.genre_id 
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.
Dennis Mertens schreef op 14.04.2009 16:39
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.
Geef eens een voorbeeld, als je wilt.
As you wish:

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.

Reageren