首页 > 解决方案 > 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 查询来获得这个想要的表?

提前致谢。

标签: mysqljoindatatable

解决方案


您需要到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 上组合了两个表。


推荐阅读