oracle 中在左连接的时候不能全部显示左表中的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 中在左连接的时候不能全部显示左表中的数据相关的知识,希望对你有一定的参考价值。

select a.*,b.mm,b.nn from aaaaa a,bbbbb b
where b.cc = '11'
and trim(a.num)=trim(b.num(+))
a表中有20万数据,b表中有100万,但a表中有的num在b表中不存在,按照左连接的原则应该是显示a表中的所有数据,但在运行之后只显示10万数据,就是b表中有的数据
其中a表的num和b表的num均为char型
a表中无重复数据,无空数据

参考技术A select a.*,b.mm,b.nn from aaaaa a left join bbbbb b on trim(a.num)=trim(b.num)
where b.cc = '11'

你所说的运行之后只显示10万数据
可能是应为 where b.cc = '11'
想全部显示a表数据
select a.*,b.mm,b.nn from aaaaa a
left join bbbbb b on ( trim(a.num)=trim(b.num) and b.cc = '11')本回答被提问者采纳

在左连接中选择取决于另一个表中字段总和的行?

【中文标题】在左连接中选择取决于另一个表中字段总和的行?【英文标题】:Select rows in left join which depend on sum of a field in the other table? 【发布时间】:2021-02-04 16:30:21 【问题描述】:

我正在尝试编写一个 SQL 左外连接查询,其中左行是根据另一个(右)表中行中字段的总和来选择的。另一个表有一个 id 字段链接回左表,并且左表和右表之间存在一对多的关系。表格(仅简化为相关字段)如下所示:

左表:

+--------+
| id     |
| amount |
+--------+

right_table:

+-------------------+
| id                |
| amount            |
| left_table_row_id |
+-------------------+

基本上,右表行的金额字段具有左表中金额的分数,并关联回left_table,因此多个right_table 行可能链接到单个left_table 行。

我尝试仅选择 left_table 行,其中 left_table.id=right_table_id 其中 金额的总和right_table 的行中具有链接 ID 相等到left_table.amount。我们不能在 WHERE 子句中使用聚合,而且我在使用 HAVING 时运气不佳。我希望这是有道理的。

【问题讨论】:

【参考方案1】:

这应该可以通过以下查询实现:

with agg as
(
    select left_table_row_id,sum(amount) as amount
    from right_table
    group by left_table_row_id
)
select *
from left_table lt
where exists (select 1 from agg where lt.id=agg.left_table_row_id and lt.amount = agg.amount)

【讨论】:

【参考方案2】:

您可以使用相关子查询进行过滤:

select l.*
from left_table l
where l.amount = (select sum(r.amount) from right_table r where r.id = l.id)

【讨论】:

这比任何连接都简单 :-) 谢谢!

以上是关于oracle 中在左连接的时候不能全部显示左表中的数据的主要内容,如果未能解决你的问题,请参考以下文章

连接 MySQL 表:在左表的一行中显示右表的所有结果

左连接

Oracle使用左外连接时,左表中的一个id在右表(数据表以天为单位)中没有数据 使用nvl替换为0

Hive表连接

左外连接和右外连接的区别

数据库表连接(内连接,外连接左连接右连接全连接交叉连接)