Verknüpfung aus zwei Tabellen

cyklop

Grünschnabel
Hallo ich habe drei Tabellen,

Tabelle 1: id; genrename
Tabelle 2: id; genreid; filmid;
Tabelle 3: id; filmname;

nun möchte ich beim bearbeiten eines speziellen Films in einem Bereich alle vorhandenen Genres anzeigen lassen und die bereits zugewiesenen angehakt haben. Kann mir jemand einen Hinweis geben wie ich das realisiere?
 
SELECT * FROM tabelle1 as t1,tabelle2 as t2,tabelle3 as t3 WHERE t1.id=t2.genreid AND t2.filmid=t3.id

so sollte das ca. sein as heißt nur das es umbenannt wurde in ein anderes weil sonst musst du das ja immer bspw. tabelle1 mit hinschreiben... und so ist es kürzer...
würd aber nur benötigt beim Vergleichen oder sortieren...

hoffe das es verständlich ist...

und in welche sprache ist das? also wo willst du das einsetzten?

MfG Gunah
 
Zuletzt bearbeitet:
also das ganze wird dann später in php eingebaut. Leut deiner Abfrage erhalte ich so aber nicht alle Einträge der Tabelle 1, die brauch ich aber um die ganzen Checkboxen zu erstellen.
Aus dem ganzen Pool sollen dann nur die ausgewählt sein die in Tabelle 2 verknüpft sind. Geht sowas nicht mit LEFT JOIN irgendwie? Wo find ich da gute verständliche Anleitungen wenn ja?
 
SQL:
SELECT genrename 
FROM tabelle1 as t1 LEFT JOIN tabelle2 as t2 ON t1.id=t2.genreid
:
:
Tabelle 1:
id; genrename
1; Action
2; Drama
3; Comedy

Tabelle 2:

id; genreid; filmid
1; 2; 1
2;3;1
3;2;2
4;1;2

Da komm ich ja dann mit dem obigen Befehl auf folgende Ausgabe:
Action
Drama
Drama
Komödie

oder nicht? somit wäre Drama doppelt, gibt es eine Möglichkeit alle Genres ausgeben zu lassen und diese dann nur mit der speziellen filmid zu verknüpfen? alle anderen bleiben NULL
 
Hier meiner Meinung nach die Lösung


create database genre;
use genre;

create table tabelle1 (id integer not null, genrename varchar(30),primary key(id));
create table tabelle2 (genreid integer not null, filmid integer not null,primary key(filmid,genreid));
create table tabelle3 (id integer not null, filmname varchar(39) , primary key(id));

insert into tabelle1(id,genrename) values ( 1,'genre1');
insert into tabelle1(id,genrename) values ( 2,'genre2');
insert into tabelle1(id,genrename) values ( 3,'genre3');
insert into tabelle1(id,genrename) values ( 4,'genre4');
insert into tabelle1(id,genrename) values ( 5,'genre5');
insert into tabelle1(id,genrename) values ( 6,'genre6');


insert into tabelle3(id,filmname) values ( 1,'film1');
insert into tabelle3(id,filmname) values ( 2,'film2');
insert into tabelle3(id,filmname) values ( 3,'film3');
insert into tabelle3(id,filmname) values ( 4,'film4');
insert into tabelle3(id,filmname) values ( 5,'film5');
insert into tabelle3(id,filmname) values ( 6,'film6');

insert into tabelle2(filmid,genreid) values ( 1,1);
insert into tabelle2(filmid,genreid) values ( 1,2);
insert into tabelle2(filmid,genreid) values ( 1,3);
insert into tabelle2(filmid,genreid) values ( 1,6);
insert into tabelle2(filmid,genreid) values ( 4,1);
insert into tabelle2(filmid,genreid) values ( 4,2);
insert into tabelle2(filmid,genreid) values ( 4,3);
insert into tabelle2(filmid,genreid) values ( 4,6);
insert into tabelle2(filmid,genreid) values ( 6,6);

select tabelle1.id, tabelle1.genrename , if (tabelle3.id is null,'--','X') as isset
from tabelle1 left outer join tabelle2 on ( tabelle2.genreid = tabelle1.id and tabelle2.filmid = 6)
left outer join tabelle3 on ( tabelle3.id = tabelle2.filmid )


select tabelle1.id, tabelle1.genrename , if (tabelle3.id is null,'--','X') as isset
from tabelle1 left outer join tabelle2 on ( tabelle2.genreid = tabelle1.id and tabelle2.filmid = 4)
left outer join tabelle3 on ( tabelle3.id = tabelle2.filmid )


select tabelle1.id, tabelle1.genrename , if (tabelle3.id is null,'--','X') as isset
from tabelle1 left outer join tabelle2 on ( tabelle2.genreid = tabelle1.id and tabelle2.filmid = 1)
left outer join tabelle3 on ( tabelle3.id = tabelle2.filmid )


select tabelle1.id, tabelle1.genrename , if (tabelle3.id is null,'--','X') as isset
from tabelle1 left outer join tabelle2 on ( tabelle2.genreid = tabelle1.id and tabelle2.filmid = 2)
left outer join tabelle3 on ( tabelle3.id = tabelle2.filmid )
 
Tabelle 1:
Da komm ich ja dann mit dem obigen Befehl auf folgende Ausgabe:
Action
Drama
Drama
Komödie

oder nicht? somit wäre Drama doppelt, gibt es eine Möglichkeit alle Genres ausgeben zu lassen und diese dann nur mit der speziellen filmid zu verknüpfen? alle anderen bleiben NULL
Du kannst die Abfrage auch einfach noch GROUP BY genrename machen, dann werden auch die doppelten gefiltert.
 
Ich hätte gern am Ende diese Ausgabe für den Film 1:
Action NULL
Drama 1
Komödie 1

oder Film 2:
Action 1
Drama 1
Komödie NULL
 

Neue Beiträge

Zurück