Knifflige Aufgabe - Konzertveranstalter

sebasian9832

Grünschnabel
Hallo liebe Community,

ich habe folgende Aufgabe, die ich trotz mehrerer Stunden intensiver Bemühungen nicht lösen kann.
So viel sei gesagt, ich kriege am Ende immer Scotland und England angezeigt; nur England ist jedoch richtig...

Aufgabe:
Zeigen Sie das Land/die Länder, in denen ALLE concert_orgniser (NICHT orgAniser) bereits waren.


TABLE: PLACE

place_no--------place_town-------place_country
----------------------------------------------------------------
1------------------Manchester--------England
2------------------Edinburgh----------Scotland
3------------------Salzburg-----------Austria
4------------------New York----------USA
5------------------Birmingham-------England
6------------------Glasgow------------Scotland
7------------------London--------------England
8------------------Chicago-------------USA
9------------------Amsterdam--------Netherlands


TABLE: CONCERT

concert_in--------concert_orgniser
-----------------------------------------------
1---------------------21
1----------------------3
2----------------------3
2---------------------21
3----------------------8
7----------------------8
9----------------------8
4---------------------21


Tables können über JOIN ON concert_in = place_no verbunden werden.


Habt Ihr Lösungsvorschläge? Muss diese Aufgabe bis Ende der Woche lösen und vorstellen... Wäre euch wirklich sehr dankbar für Eure Hilfe!
 
Zuletzt bearbeitet:
Jeder der concert_orgniser (3, 8, 21) haben bereits Konzerte veranstaltet in den verschiedenen Ländern (siehe concert_in).

Frage ist nun, in welchem Land sowohl 3, als auch 8 als auch 21 waren. Dies ist lediglich England.

Allerdings weiß ich nicht, wie ich die Abfrage gestalten muss.

Hoffe die Aufgabenstellung ist noch klarer...
 
Hallo,

Schau mal hier:
SQL:
create table places (id int, town varchar(32), country varchar(32));

insert into places values (1,'Manchester','England');
insert into places values (2,'Edinburgh','Scotland');
insert into places values (3,'Salzburg','Austria');
insert into places values (4,'New York','USA');
insert into places values (5,'Birmingham','England');
insert into places values (6,'Glasgow','Scotland');
insert into places values (7,'London','England');
insert into places values (8,'Chicago','USA');
insert into places values (9,'Amsterdam','Netherlands');

create table concerts (id int, organizer int);

insert into concerts values(1,21);
insert into concerts values(1,3);
insert into concerts values(2,3);
insert into concerts values(2,21);
--insert into concerts values(2,8);
insert into concerts values(3,8);
insert into concerts values(7,8);
insert into concerts values(9,8);
insert into concerts values(4,21);

SQL:
mysql> select * from places;
+------+------------+-------------+
| id   | town       | country     |
+------+------------+-------------+
|    1 | Manchester | England     |
|    2 | Edinburgh  | Scotland    |
|    3 | Salzburg   | Austria     |
|    4 | New York   | USA         |
|    5 | Birmingham | England     |
|    6 | Glasgow    | Scotland    |
|    7 | London     | England     |
|    8 | Chicago    | USA         |
|    9 | Amsterdam  | Netherlands |
+------+------------+-------------+
9 rows in set (0.00 sec)

SQL:
mysql> select * from concerts;
+------+-----------+
| id   | organizer |
+------+-----------+
|    1 |        21 |
|    1 |         3 |
|    2 |         3 |
|    2 |        21 |
|    3 |         8 |
|    7 |         8 |
|    9 |         8 |
|    4 |        21 |
+------+-----------+
8 rows in set (0.00 sec)

SQL:
mysql> 
select x.country from (
    select p.id,p.country,count(distinct c.organizer) organizerCount from places p inner join concerts c on p.id = c.id group by country
) x where x.organizerCount >= all(select count(distinct organizer) from concerts);
+---------+
| country |
+---------+
| England |
+---------+
1 row in set (0.00 sec)

Fügt mann dann noch einen Satz zu den Konzerten in Scottland hinzu:

SQL:
insert into concerts values(2,8);

Bekommt man:

SQL:
mysql> select x.country from (
    ->     select p.id,p.country,count(distinct c.organizer) organizerCount from places p inner join concerts c on p.id = c.id group by country
    -> ) x where x.organizerCount >= all(select count(distinct organizer) from concerts);
+----------+
| country  |
+----------+
| England  |
| Scotland |
+----------+

Gruß Tom
 
Vielen Dank Tom!

Wirklich viel Mühe hast Du Dir gegeben.
Der Vorletzte, längere SQL Code, ist ja genau das, was zur Lösung führt.

Jedoch verstehe ich nicht genau, wie das nun funktioniert hat.

Könntest Du mir das mal formulieren, was da wie abgefragt wird?


Dankeschön für Deine Hilfe
 

Neue Beiträge

Zurück