mysql - SQL创建表之间ID相互关联的表
问题描述
我在数据库中有两个表,我想以特定方式组合它们。
以下是表格:
table: watchhistory
customerid | titleid | rating | date
------------+-----------+--------+------------
1488844 | tt0389605 | 3 | 2005-09-06
1181550 | tt0389605 | 3 | 2004-02-01
1227322 | tt0389605 | 4 | 2004-02-06
786312 | tt0389605 | 3 | 2004-11-16
525356 | tt0389605 | 2 | 2004-07-11
1009622 | tt0389605 | 1 | 2005-01-19
table: media
mediaid | directorid | title | genre | runtime | releasedate
-----------+------------+----------------+----------------------+---------+-------------
tt0090557 | nm0851724 | Round Midnight | [Drama, Music] | 133 | 1986
tt0312296 | nm0146385 | 1 Giant Leap | [Documentary, Music] | 155 | 2002
tt0078721 | nm0001175 | 10 | [Comedy, Romance] | 122 | 1979
tt2170245 | nm3593080 | 10 | [Thriller] | 76 | 2012
tt5282238 | nm6207118 | 10 | [Thriller] | 90 | 2015
tt0312297 | nm0302572 | 10 Attitudes | [Comedy, Drama] | 87 | 2001
我想制作一个包含以下列的表格:
title (from media) | Views#
我创建了这个查询来获取前 10 个 titleid,这意味着 watchhistory 中出现次数最多的前 10 个标题:
SELECT titleid, count(*) as Views FROM watchhistory GROUP BY titleid ORDER BY Views DESC limit 10;
titleid | views
------------+-------
tt7631348 | 1307
tt14627576 | 1065
tt8372506 | 1063
tt5793632 | 1056
tt1403008 | 1053
tt7825602 | 1051
tt6840954 | 1046
tt12780424 | 1042
tt7266106 | 1036
tt6539274 | 1035
目标是本质上用标题(来自媒体)替换这个 titleid 列(来自 watchhistory)。我尝试在 watchhistory.titleid 和 media.mediaid 之间使用连接,但没有成功。
我需要什么 SQL 查询来获得这个想要的表?
提前致谢。
解决方案
您需要到INNER JOIN
您的媒体表mediaid
:
SELECT m.title, count(wh.*) as Views
FROM watchhistory wh
INNER JOIN media m on m.mediaid = wh.titleid
GROUP BY m.mediaid
ORDER BY Views DESC LIMIT 10;
要查看 select 和 join 正在做什么,您可以简化它:
SELECT m.*, wh.*
FROM watchhistory wh
INNER JOIN media m on m.mediaid = wh.titleid
结果将是一个连接的“表”,它在 mediaid/titleid 上组合了两个表。
推荐阅读
- azure-api-management - Azure APIM - 支持 awverify
- python - Django 文件和用户交互
- wpf - 运行时剪辑的图像
- node.js - Nodejs UUIDv4 在 Mongoose 中使用时产生常量 id 值
- module - 从 lua 模块中的函数返回值
- memcached - memcached 字节大于 limit_maxbytes
- reactjs - 必须在文本组件中呈现不变的违规文本字符串
- c# - 即使集合已锁定,foreach 也会出现 InvalidOperationException
- elixir - 如何将信息添加到 ExUnit 的输出以应对失败的测试
- assembly - 汇编中的指令STI,RET和IRET有什么区别