【发布时间】:2020-09-07 09:36:06
【问题描述】:
我需要创建一个 SQL 视图,为每部电影关联以下信息:
1) 电影放映次数
2) 每部电影放映的预告片数量及其长度
3) 每部电影放映的点数和长度
我很抱歉我的请求太长了,但我尽量说得更清楚。
我有这些表:
FILM -> id_film 主键
id_film film_title
1 'Iron Man'
2 'Spider Man'
3 'Thor'
Screening_film -> id_screening PRIMARY KEY, id_film FOREIGN KEY 引用 FILM (id_film)
id_screening id_film
1 1
2 2
3 3
4 3
SPOT -> id_spot 主键
id_spot lenght
1 10
2 20
3 30
TRAILER -> id_trailer 主键
id_trailer lenght
4 10
5 20
6 30
Spot_trailer_screening -> 在这张表中,有现场/预告片和电影之间的关联
id_ST id_film
1 1
2 2
3 3
4 1
5 2
6 3
这是我的代码:
CREATE VIEW film_list AS
SELECT f.film_title,
count(x.id_screening) number_of_screening, count (s.id_spot) num_spot,
sum(s.lenght) spot_lenght, count(t.id_trailer) num_trailer,
sum(t.lenght) trailer_lenght
FROM film f
FULL OUTER JOIN screening_film x
ON x.id_film = f.id_film
FULL OUTER JOIN spot_trailer_screening y --The problems begin with this join, the count of number_of_screening isn't correct--
ON y.id_film = f.id_film
FULL OUTER JOIN spot s
ON s.id_spot = y.id_st
FULL OUTER JOIN trailer t
ON t.id_trailer = y.id_st
GROUP BY f.id_film, f.film_title;
输出:
FILM_TITLE NUMBER_OF_SCREENING NUM_SPOT SPOT_LENGHT NUM_TRAILER TRAILER_LENGHT
Iron Man 2 1 10 1 10
Spider Man 2 1 20 1 20
Thor 4 2 60 2 60
正确的输出应该如下:
FILM_TITLE NUMBER_OF_SCREENING NUM_SPOT SPOT_LENGHT NUM_TRAILER TRAILER_LENGHT
Iron Man 1 1 10 1 10
Spider Man 1 1 20 1 20
Thor 2 1 30 1 30
【问题讨论】:
-
为什么是
full outer join?看来你有重复..所以你必须修复你的group by或使用distinct。 -
@Georg,使用其他类型的 Join,我会丢失信息。