sql—如何选择彼此不相连的变量?

wfauudbj  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(340)

练习是:
为每部影片和每部基诺放映,如果影片是否在基诺放映(输出:filmtitel、kino、anzahl)。如果胶卷在kino中显示,则打印anzahl>0,否则打印anzahl 0。
我错过了选择打印出所有的电影,如果他们没有显示在基诺与安扎尔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);
mepcadol

mepcadol1#

首先做一个交叉连接得到所有 film 以及 kino 组合。然后向左加入 vorfuehrungfid 以及 name ( kino 也应该有一个代理键(整数)。那你就可以了 GROUP BY fid, name 然后坐飞机 count() 在任何列上 vorfuehrung . 如果 film 没有在电视上播放 kino ,列来自 vorfuehrungNULL 因此这一行不算在内。

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;

相关问题