您需要至少有一个表格,其中每个 user 和 const(观看电影)各有一行。在 3 个示例表中,您没有发布任何内容显示谁观看了哪些电影,这是您解决问题所需的信息。你提到有“每个人的评级的单独表格”,所以我假设你有这些信息。不过,您需要将所有这些组合成一个名为 PERSON_MOVIE 或类似名称的表。
假设您的第二个表名为 GENRE,其列是 ID、流派。
假设您的第三个表名为 GENRE_MOVIE,其列是 Const 和 ID(ID 对应于 GENRE 表上的 ID)
假设您没有发布但必需的第四个表称为PERSON_MOVIE,它的列是人员、常量、评级。
然后您可以编写如下查询:
select vw1.*, ge.genre
from (select um.person, gm.id as genre_id, count(*) as num_of_genre
from user_movie um
inner join genre_movie gm
on um.const = gm.const
group by um.person, gm.id) vw1
inner join (select person, max(num_of_genre) as high_count
from (select um.person, gm.id, count(*) as num_of_genre
from user_movie um
inner join genre_movie gm
on um.const = gm.const
group by um.person, gm.id) x
group by person) vw2
on vw1.person = vw2.person
and vw1.num_of_genre = vw2.high_count
inner join genre ge
on vw1.genre_id = ge.id
编辑回复:您的评论:
所以现在您有多个表格反映人们对电影的评分。您需要将它们组合到一个名为 PERSON_MOVIE 或类似名称的表中(如上例所示)。
表格上会有 3 列:person、const、rating
我不确定 access 是否支持传统的create table as select 查询,但通常您可以通过以下方式构造这样的表:
create table person_movie as
select 'Bob', const, [You rated]
from ratings_by_bob
union all
select 'Sally', const, [You rated]
from ratings_by_sally
union all
select 'Jack', const, [You rated]
from ratings_by_jack
....
如果没有,只需手动组合表格并添加第三列,如图所示,指示每行反映的用户。然后你就可以运行我的初始查询了。