Mehrfachabfrage in einer Tabelle

Randy Busher

Benutzer
Beiträge
10
Hallo ihr Lieben,

ich wünsche euch allen eine gesundes neues Jahr.

Ich habe auch gleich mal eine Knobelaufgabe, die ganz sicher total einfach zu lösen ist.

Ich habe eine Tabelle bestehend aus zwei Feldern

Tabellenname : Titel
Felder: Titel_ID und Genre_ID

Jeder Titel kann mehrere Genre haben. Daraus ergibt sich folgendes Bild:

Titel_ID Genre_ID
1 1
1 2
1 3
2 2
2 3
3 1
3 3

Ich möchte jetzt eine SQL Abfrage erstellen, die mir alle Titel_ID anzeigt, die die Genre_ID 1 UND 3 haben.
Das Ergebnins soll also sein
Titel_ID
1
3

Wie sieht so eine Abfrage aus? Ich komme also mit der Where Klausel nicht klar.

Liebe Grüße
Randy
 
Werbung:
Schnellschuß, aber mit PostgreSQL:

Code:
postgres=# create table randy(t int, g int);
CREATE TABLE
postgres=# copy randy from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> 1    1
>> 1    2
>> 1    3
>> 2    2
>> 2    3
>> 3    1
>> 3    3
>> \.
COPY 7
postgres=# select t, array_agg(g) from randy group by t;
 t | array_agg 
---+-----------
 3 | {1,3}
 2 | {2,3}
 1 | {1,2,3}
(3 rows)

postgres=# with tmp as (select t, array_agg(g) from randy group by t) select * from tmp where array_Agg @> array[1,3];
 t | array_agg 
---+-----------
 3 | {1,3}
 1 | {1,2,3}
(2 rows)

postgres=#
 
Hier das Beispiel für MySQL


Code:
CREATE TABLE IF NOT EXISTS `docs` (
  `id` int(6) unsigned NOT NULL,
  `Titel_ID` int(6) unsigned NOT NULL,
  `Genre_ID` int(3) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `docs` (`id`, `Titel_ID`, `Genre_ID`) VALUES
  ('1', '1', '1'),
  ('2', '1', '2'),
  ('3', '1', '3'),
  ('4', '2', '2'),
  ('5', '2', '3'),
  ('6', '3', '1'),
  ('7', '3', '3');


und die Abfrage:


Code:
SELECT  `Titel_ID`, GROUP_CONCAT(`Genre_ID`) AS Genres from docs
WHERE `Genre_ID` IN (1,3)
group by `Titel_ID`
having count(*) = 2;

Das GROUP_CONCAT ist nicht so wichtig!
 
Werbung:
Zurück
Oben