mysql - SQL Join 2 tables 即使没有匹配的数据

标签 mysql sql

我正在努力连接我的表的内容,我正在尝试连接两个表,同时仍然从表“电影”中获取结果,即使表“users_ratings”中没有匹配的记录。但它似乎不起作用我只得到一个结果。

--电影表(100条记录)

CREATE TABLE IF NOT EXISTS `movies` (
  `ID` int(20) NOT NULL,
  `title_name` vachar(255) NOT NULL,
  `creation_date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--评分表(1条记录)

CREATE TABLE IF NOT EXISTS `users_ratings` (
  `ID` int(20) NOT NULL,
  `user_id` bigint(20) NOT NULL,
  `type_id` bigint(20) NOT NULL,
  `type_name` vachar(255) NOT NULL,
  `score` int(11) NOT NULL,
  `creation_date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--我的查询

SELECT name_table.*, ur.type_id, count(ur.type_id) vote_count
FROM `movies` name_table 
left JOIN users_ratings ur ON name_table.id = ur.type_id
WHERE ur.type_name= 'movies'
GROUP BY ur.type_id
Order BY vote_count DESC

--查询结果

ID    title_name  creation_date        type_id  vote_count
1     Avatar      2014-05-20 00:00:00  1        1

--Results I'm trying to get (Should I get 100 records)

ID    title_name      creation_date        type_id  vote_count
1     Avatar          2014-05-20 00:00:00  1        1
2     Avengers        2014-05-20 00:00:00  NULL     NULL
3     Ant-Man         2014-05-20 00:00:00  NULL     NULL
4     Jurassic World  2014-05-20 00:00:00  NULL     NULL
5     Rampage         2014-05-20 00:00:00  NULL     NULL
6     Black Panther   2014-05-20 00:00:00  NULL     NULL
7     Tombe Raider    2014-05-20 00:00:00  NULL     NULL
8     Deadpool        2014-05-20 00:00:00  NULL     NULL
9     Pacific Rim     2014-05-20 00:00:00  NULL     NULL

最佳答案

因为您已经放置了 ur.type_name = movies 的显式 Where 条件,所以它会在 Left join 之后过滤掉结果。您需要将 Where 条件转换为 LEFT JOIN ON 匹配。

请尝试以下操作:

SELECT name_table.*, ur.type_id, count(ur.type_id) vote_count
FROM `movies` name_table 
left JOIN users_ratings ur ON name_table.id = ur.type_id 
                              AND ur.type_name= 'movies'
GROUP BY name_table.id 
Order BY vote_count DESC

注意: As pointed out by @Strawberry ,您应该避免使用基于通配符 (*) 的 Select;并仅获取您的应用程序代码所需的特定列。

此外,您可以阅读 Why is SELECT * considered harmful?

关于mysql - SQL Join 2 tables 即使没有匹配的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52457596/

相关文章:

mysql - SQL-phpmyadmin(有重复记录的问题)

mysql - 如何从MySQL表中获取多列具有相同值的所有行?

php - 从外键表中检索字段

sql - Django多对多: Best way to get elements in one related query set but exclude elements in other related query sets?

MySQL查询根据按月分组的激活日期统计累计用户数

php - 拉维尔 : How to take last n(any number) rows after ordered in ascending order?

PHP 编写一个价格比较工具

php - mysql 查询中的 case 语句或 if 条件

java - 如何在贷款表中添加到期日?

mysql查询将三列之和插入新列