首页 > 解决方案 > SQL 查询中有两个 COUNT() 列,一个用于 IN/INNER JOIN,一个用于 NOT IN/LEFT JOIN

问题描述

是否可以创建一个查询,其中您可以有两个COUNT()列,其中一列用于IN()之类的内容,另一列用于NOT IN()之类的内容,并且也仅使用JOIN

例如,我有一个表tbl_atbl_b。在单个查询中,我希望两个表中都存在 1 个COUNT()列。另一个COUNT()列用于不存在于tbl_b但存在于tbl_a中的行。

sample in **tbl_a**:
|trans_id|amount |
|--| --- | --- |
|001 | 100.00 |
|002 |250.00|
|003 |300.00 |

sample in **tbl_b**:
|trans_id|ticket_no |
|--| --- | --- |
|001 |X0001|
|002 |X0002|


and my expected output:
|in_a_and_b|not_in_b|
|--| --- | --- |
|2|1|

标签: sqlingres

解决方案


假设您有一个唯一匹配表中行的键,您可以使用:

select count(*) as in_a,
       count(b.col) as in_a_and_b,
       (count(*) - count(b.col)) as in_a_not_b
from tbl_a a left join
     tbl_b b
     on a.col = b.col

推荐阅读