mysql - 组合 LEFT/INNER JOIN + GROUP BY 时缺少 SQL 条目

标签 mysql left-join inner-join

我有以下 MySQL 结构(大大减少了):

CREATE TABLE `site_movies` (
  `id` int(10),
  `title` varchar(90),
  PRIMARY KEY (`id`)
) ENGINE=MyISAM;

INSERT INTO `site_movies` VALUES(1, 'Borrowers, The');
INSERT INTO `site_movies` VALUES(2, 'Louis C.K.: Chewed Up');
INSERT INTO `site_movies` VALUES(3, 'Louis C.K.: Shameless');
INSERT INTO `site_movies` VALUES(4, 'Vinni-Pukh');

CREATE TABLE `site_movies_directors` (
  `id` mediumint(8),
  `name` varchar(255),
  PRIMARY KEY (`id`)
) ENGINE=MyISAM;

CREATE TABLE `site_movies_directors_connections` (
  `movie_id` mediumint(8),
  `director_id` mediumint(8)
) ENGINE=MyISAM;

CREATE TABLE `site_movies_seen` (
  `object_id` int(10),
  `date` varchar(10),
  `rating` tinyint(2)
) ENGINE=MyISAM;

INSERT INTO `site_movies_seen` VALUES(1, '0', 4);
INSERT INTO `site_movies_seen` VALUES(2, '1293821757', 5);
INSERT INTO `site_movies_seen` VALUES(3, '1293821758', 7);
INSERT INTO `site_movies_seen` VALUES(4, '0', 6);

然后是以下查询(也最小化了很多):

SELECT m.title, s.date
FROM site_movies_seen s
INNER JOIN site_movies m ON s.object_id = m.id
LEFT JOIN site_movies_directors_connections AS mdc ON ( m.id = mdc.movie_id ) 
GROUP BY mdc.movie_id, s.date
ORDER BY s.date ASC

打印:

title   date 
Borrowers, The  0
Louis C.K.: Chewed Up   1293821757
Louis C.K.: Shameless   1293821758

请注意“Vinni-Pukh”丢​​失了,因为它是 _seen 表中日期 = 0 的第二个条目。即使多个整体具有相同的时间戳,我如何包含所有整体?

最佳答案

将您的 group by 语句更改为:

GROUP BY m.id, s.date

您的连接条件是 m.id = mdc.movi​​e_id,因此您可能认为这两个字段始终相等,因此是否编写 m.id< 并不重要mdc.movi​​e_id 在您的 GROUP BY 中。这不是真的,因为您使用的是 LEFT JOIN,而不是 INNER JOIN。这意味着 mdc.movi​​e_id 可以为 NULL,所有 NULL 条目都进入同一组。

此外,由于您没有从 site_movies_directors_connections 中选择任何列,因此您应该从查询中完全忽略它。

SELECT m.title, s.date
FROM site_movies_seen s
INNER JOIN site_movies m ON s.object_id = m.id
GROUP BY m.id, s.date
ORDER BY s.date

关于mysql - 组合 LEFT/INNER JOIN + GROUP BY 时缺少 SQL 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4574651/

相关文章:

php - MySQL:在带有@rownum 的php 函数中左联接?

mysql - 如何在具有条件的第二个表上使用分组依据时从左表中检索所有数据

php - 在 SQL 中从另一个表更新一个表的最佳方法是什么?

mysql - 带有可定制 View 的 Sql Join

将限制设置为 13214 时 MySQL 变慢

c# - 使用 xbuild 和 mono 时未嵌入 Entity Framework 元数据工件

php - 转义引号php和mysql

具有大于和小于日期条件的 LINQ 左外连接

mysql - mysql内连接问题

MySQL 内连接 2 个表并按表 1 中的 ID 对表 2 进行计数