Select 左联接中的行取决于另一个 table 中字段的总和?
Select rows in left join which depend on sum of a field in the other table?
我正在尝试编写一个 SQL 左外连接查询,其中左行 select 根据另一行(右)table 行中的字段总和编辑.另一个table有一个id字段链接回左边table,左右table之间是一对多的关系。 tables(仅简化为相关字段)如下所示:
left_table:
+--------+
| id |
| amount |
+--------+
right_table:
+-------------------+
| id |
| amount |
| left_table_row_id |
+-------------------+
基本上右边 table 行的金额字段有左边 table 金额的一小部分,并且关联回 left_table
,所以几个 right_table
行可能链接到单个 left_table
行。
我正在尝试 select 仅 left_table
行,其中 left_table.id=right_table_id
和 总和 在 right_table
的行中具有链接 ID 等于 left_table.amount
。我们不能在 WHERE 子句中使用聚合,我也没有运气使用 HAVING。我希望这是有道理的。
这应该可以通过以下查询实现:
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)
您可以使用相关子查询进行过滤:
select l.*
from left_table l
where l.amount = (select sum(r.amount) from right_table r where r.id = l.id)
我正在尝试编写一个 SQL 左外连接查询,其中左行 select 根据另一行(右)table 行中的字段总和编辑.另一个table有一个id字段链接回左边table,左右table之间是一对多的关系。 tables(仅简化为相关字段)如下所示:
left_table:
+--------+
| id |
| amount |
+--------+
right_table:
+-------------------+
| id |
| amount |
| left_table_row_id |
+-------------------+
基本上右边 table 行的金额字段有左边 table 金额的一小部分,并且关联回 left_table
,所以几个 right_table
行可能链接到单个 left_table
行。
我正在尝试 select 仅 left_table
行,其中 left_table.id=right_table_id
和 总和 在 right_table
的行中具有链接 ID 等于 left_table.amount
。我们不能在 WHERE 子句中使用聚合,我也没有运气使用 HAVING。我希望这是有道理的。
这应该可以通过以下查询实现:
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)
您可以使用相关子查询进行过滤:
select l.*
from left_table l
where l.amount = (select sum(r.amount) from right_table r where r.id = l.id)