mysql - 连接表时缺少行
问题描述
这个问题对我来说很熟悉,但我无法弄清楚我需要在 SQL 语句中修改什么来修复它。
简而言之,我有 2 张表 - 公司和评级。我希望所有公司都被列出,即使公司没有评级,但查询目前只抓取那些。我该如何解决这个问题?我认为使用 LEFT JOIN 而不是 INNER JOIN 就足够了,但我错了。
SELECT company.id, company.title, AVG(ratings.ratings)
FROM companies company
INNER JOIN companies_ratings ratings
ON ratings.company_id = company.id
CREATE TABLE IF NOT EXISTS `companies_ratings` (
`id` int(4) UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` int(4) UNSIGNED NOT NULL,
`ratings` enum('1','2','3','4','5') DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `companies_ratings` (`id`, `company_id`, `ratings`) VALUES
(1, 1, '3'),
(2, 1, '5');
CREATE TABLE IF NOT EXISTS `companies` (
`id` int(4) UNSIGNED NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `companies` (`id`, `title`) VALUES
(1, 'Company 1'),
(2, 'Company 2');
解决方案
我写了这个有效的查询!
(SELECT company.id, company.title, AVG(ratings.ratings)
FROM companies company
left JOIN companies_ratings ratings
ON ratings.company_id = company.id)
union all
(SELECT company.id, company.title, AVG(ratings.ratings)
FROM companies company
left JOIN companies_ratings ratings
ON ratings.company_id = company.id
WHERE ratings.id is null )
推荐阅读
- ios - 音频消息播放器,如 Swift 中的 WhatsApp
- excel - 导入带有重音符号的 CSV 文件
- flutter - 在颤振中出错:RangeError(索引):无效值:不在包含范围内
- angular - 我应该将当前的 ionic 3 应用程序更新为 ionic 5 和电容器,还是应该从科尔多瓦转移到电容器?
- c# - 在 Visual Studio 中调试作为本地系统(Windows 服务)运行的进程
- java - 根据行号从数组列表中获取 JSON 对象
- javascript - 使用 Axios 在 GET 请求中传递令牌
- angular - 类型'可观察的
' 不可分配给 Observable 类型 rxjs 角度 - java - 放