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

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

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

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

创建数据库的代码:

  1. CREATE TABLE Film
  2. (
  3. FID int,
  4. Titel VARCHAR(255),
  5. Laenge int
  6. );
  7. CREATE TABLE Vorfuehrung
  8. (
  9. Film int,
  10. Kino VARCHAR(255)
  11. );
  12. Create Table Kino
  13. (
  14. Name VARCHAR(255),
  15. Plaetze int,
  16. Saele int
  17. );
  18. INSERT INTO Film (FID, Titel, Laenge) VALUES (1, 'Die Nase', 90);
  19. INSERT INTO Film (FID, Titel, Laenge) VALUES (2, 'Die Hand', 85);
  20. INSERT INTO Film (FID, Titel, Laenge) VALUES (3, 'Der Arm', 120);
  21. INSERT INTO Film (FID, Titel, Laenge) VALUES (4, 'Das Bein', 75);
  22. INSERT INTO Vorfuehrung (Film, Kino) VALUES (1, 'Gloria');
  23. INSERT INTO Vorfuehrung (Film, Kino) VALUES (2, 'Gloria');
  24. INSERT INTO Vorfuehrung (Film, Kino) VALUES (3, 'Gloria');
  25. INSERT INTO Vorfuehrung (Film, Kino) VALUES (2, 'Apollo');
  26. INSERT INTO Vorfuehrung (Film, Kino) VALUES (4, 'Apollo');
  27. INSERT INTO Kino (Name, Plaetze, Saele) VALUES ('Gloria', 200, 3);
  28. 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 因此这一行不算在内。

  1. SELECT f.titel,
  2. k.name,
  3. count(v.film) anzahl
  4. FROM film f
  5. CROSS JOIN kino k
  6. LEFT JOIN vorfuehrung v
  7. ON v.film = f.fid
  8. AND v.kino = k.name
  9. GROUP BY f.titel,
  10. k.name;

相关问题