gpt4 book ai didi

mysql - 有没有办法创建一个选择表中最大行的 View ?

转载 作者:行者123 更新时间:2023-11-30 23:05:14 25 4
gpt4 key购买 nike

我正在创建一个极其简单的分析游戏。

  1. 用户被问了N个问题;
  2. 每个答案都附有个人资料;
  3. 答案最多的配置文件分配给用户(如果两个或多个配置文件是偶数,我会选择第一个)。

表的数据库结构如下:

play (id, user_id)
profile (id, title, description)
answers(id, question_id, profile_id, text)
play_aswers(id, play_id, answer_id)
play_summary(play_id, tot, profile) -- this is a view

play_summary View 汇总了答案,并按从答案中读取的 profile_id 对答案进行分组。

有没有一种方法可以创建与此查询等效的 View ,其中选择了具有最大“tot”的行:

SELECT *
FROM
`play`,
`profile`,
`play_summary` INNER JOIN (
SELECT `play_id`, max(tot) AS tot
FROM `play_summary`
GROUP BY `play_id`
) AS support ON
`play_summary`.`play_id` = `support`.`play_id` AND
`play_summary`.`tot` = `support`.`tot`
WHERE
`play`.`id` = `play_summary`.`play_id` AND
`profile`.`id` = `play_summary`.`profile_id`;

我正在使用 mysql,如果我尝试我得到错误“ View 的 SELECT 在 FROM 子句中包含一个子查询”。

我更愿意使用 View 在数据库中拥有完整的逻辑,而不使用函数或过程。

提前致谢。

编辑:改编自@strawberry 下面的答案的最终解决方案是:

( CREATE VIEW play_profile AS )

SELECT s.*, f.*
FROM play y
JOIN play_summary s
ON s.play_id = y.id
JOIN profile f
ON f.id = s.profile_id
LEFT
JOIN play_summary x
ON x.play_id = s.play_id
AND x.tot > s.tot
WHERE x.play_id IS NULL;

最佳答案

不要混合使用隐式(逗号)和显式 JOIN 语法。如果不是灾难的话,这会导致困惑。

就是说,这样的事情会起作用(符号可能是从后到前),但这不会像您的非关联子查询那样执行...

SELECT x.*
FROM play y
JOIN play_summary s
ON s.play_id = y.id
JOIN profile f
ON f.id = s.profile_id
LEFT
JOIN play_summary x
ON x.play_id = s.play_id
AND x.tot < y.tot
WHERE x.play_id IS NULL;

关于mysql - 有没有办法创建一个选择表中最大行的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22193838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com