我有一个名为Movie,Genre和Keyword的表,从中创建了一个名为“ genkeyword”的视图。视图“ genkeyword”具有很多元组,因此可以在DB Fiddle处对其进行访问。
以下查询计算genkeyword中的电影与Harry Potter共同的类型的频率以及genkeyword中的电影与Harry Potter共同的关键字的频率。然后,它使用完整的外部联接将两个查询的结果合并在一起。
SELECT
*
FROM
(
SELECT
title,
year,
count(distinct genre) as genre_freq
FROM
genkeyword
where
(
genre in (
select
genre
from
genkeyword
where
title = 'Harry Potter and the
Deathly Hallows'
)
)
AND title <> 'Harry Potter and the Deathly Hallows'
group by
title,
year
) a
FULL OUTER JOIN (
select
title,
year,
count(distinct keyword) as keyword_freq
FROM
genkeyword
where
keyword in (
select
keyword
from
genkeyword
where
title = 'Harry Potter and
the Deathly Hallows'
)
and title <> 'Harry Potter and the Deathly Hallows'
group by
title,
year
) b ON b.title = a.title;
上述查询的输出如下:
title | year | genre_freq | title | year | keyword_freq
Cinderella 2015 2 Cinderella 2015 2
Enchanted 2007 1 Enchanted 2007 3
How to train your dragon 2010 2 null null null
The Shape of Water 2017 2 The Shape of Water 2017 1
我知道对于两个结果集A和B,完整的外部联接将输出A和B中匹配的行,以及A中不匹配B中的行和B中匹配行的行A中没有匹配的行。
但是,在输出的第三行(电影是“如何训练龙”)中,为什么title和year属性的值为空?我知道对于keyword_freq来说,该值将为null,因为电影没有与哈利·波特相同的任何关键字,但是title和year属性分别没有值“ How to training your dragon”和2010吗? / p>
任何见解都值得赞赏。