sql - 从 SQL JOIN 查询获取所需输出的问题
问题描述
试图从多个 SQL 表中提取数据。我有一个主表和几个子表。我想从给定条件的主表中获取所有行,并从子表中添加一些字段。我认为OUTER JOIN
应该可以工作,但我没有获得全部数据。
当我在COUNT
具有条件的主表上运行 a 时,我得到 ~10k 行,这是我加入其他表后期望得到的。我知道我会在某些行条目上获得 NULL 值。
这是我提出的查询,但我只得到部分结果
SELECT main_table.group_id, main_table.floor, sub_table1.Name, sub_table2.base
FROM main_table
LEFT JOIN ON main_table.group_id =sub_table1.group_id
LEFT JOIN ON main_table.group_id =sub_table2.group_id
WHERE main_table.year = 2000 AND sub_table1.year = 2000
AND sub_table2.year = 2000 AND main_table.group = 'C'
我希望看到大约 10k 行的集合,因为这是我仅使用 where 子句查询主表时得到的数字。
SELECT COUNT(*) FROM main_table WHERE year = 2000 AND group = 'C';
解决方案
您的where
子句从外部联接中过滤掉多余的行——有效地将它们变成内部联接。
除第一个表之外的所有条件都应在on
子句中。但我会将其表述为:
SELECT main_table.group_id, main_table.floor, sub_table1.Name, sub_table2.base
FROM main_table LEFT JOIN
sub_table1
ON main_table.group_id = sub_table1.group_id AND
main_table.year = sub_table1.year LEFT JOIN
sub_table2
ON main_table.group_id = sub_table2.group_id AND
main_table.year = sub_table2.year
WHERE main_table.year = 2000 AND main_table.group = 'C';
你希望year
s 相等,所以这应该是一个JOIN
条件。那么您只需要在WHERE
子句中指定一次年份。
推荐阅读
- java - Spring Boot 找不到 Thymeleaf(消息)属性文件
- html - 具有列环绕和不同高度的引导垂直对齐
- powershell - 使用嵌套模块加载 PowerShell 模块会出现错误
- javascript - jQuery - 检测元素是否在视口中
- php - 我的验证器功能有什么问题?
- .net - 如何处理 EndSave 事件(AutoCAD .net vb)?
- javascript - 修改 Web Speech API 的问题?
- android - Google Pixel 中的指纹扫描错误
- ibm-midrange - 如何知道哪些成员嵌入了 SQL
- c - 如何在c中用'%30'替换字符串中的空格