首页 > 解决方案 > 从 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';

标签: sqloracleleft-join

解决方案


您的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';

你希望years 相等,所以这应该是一个JOIN条件。那么您只需要在WHERE子句中指定一次年份。


推荐阅读