Как выбрать переменные, не связанные друг с другом? - PullRequest
1 голос
/ 26 мая 2020

Упражнение:

Показывать для каждого фильма и каждого кино, независимо от того, показан ли фильм в кино или нет (Вывод: Filmtitel, Kino, Anzahl). Если фильм показан в Kino, распечатайте Anzahl> 0, иначе распечатайте Anzahl 0.

Мне не хватает выбора для печати всей пленки, если они не показаны в Kino с Anzahl 0.

Мой код:

SELECT Film.Titel, Vorfuehrung.Kino,  1 AS Anzahl
FROM Film
join Vorfuehrung on Film.FID = Vorfuehrung.FILM

Код для создания базы данных:

CREATE TABLE Film 
( 
    FID     int, 
    Titel VARCHAR(255), 
    Laenge  int
); 

CREATE TABLE Vorfuehrung 
( 
    Film         int, 
    Kino         VARCHAR(255) 

); 

Create Table Kino
( 
    Name    VARCHAR(255), 
    Plaetze int, 
    Saele  int 
); 


INSERT INTO Film (FID, Titel, Laenge) VALUES (1, 'Die Nase', 90); 

INSERT INTO Film (FID, Titel, Laenge) VALUES (2, 'Die Hand', 85); 

INSERT INTO Film (FID, Titel, Laenge) VALUES (3, 'Der Arm', 120); 

INSERT INTO Film (FID, Titel, Laenge) VALUES (4, 'Das Bein', 75); 


INSERT INTO Vorfuehrung (Film, Kino) VALUES (1, 'Gloria'); 
INSERT INTO Vorfuehrung (Film, Kino) VALUES (2, 'Gloria'); 
INSERT INTO Vorfuehrung (Film, Kino) VALUES (3, 'Gloria'); 
INSERT INTO Vorfuehrung (Film, Kino) VALUES (2, 'Apollo'); 
INSERT INTO Vorfuehrung (Film, Kino) VALUES (4, 'Apollo'); 

INSERT INTO Kino (Name, Plaetze, Saele) VALUES ('Gloria', 200, 3); 
INSERT INTO Kino (Name, Plaetze, Saele) VALUES ('Apollo', 300, 2);

1 Ответ

0 голосов
/ 26 мая 2020

Сначала выполните перекрестное соединение, чтобы получить все комбинации film и kino. Затем оставьте соединение vorfuehrung на fid и name (kino, вероятно, также должен иметь суррогатный ключ (целое число), BTW.). Затем вы можете GROUP BY fid, name и взять count() в любом столбце из vorfuehrung. Если film не было показано в kino, столбец из vorfuehrung будет NULL и, следовательно, строка не будет учитываться.

SELECT f.titel,
       k.name,
       count(v.film) anzahl
       FROM film f
            CROSS JOIN kino k
            LEFT JOIN vorfuehrung v
                      ON v.film = f.fid
                         AND v.kino = k.name
       GROUP BY f.titel,
                k.name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...