Sql 带计数条件的嵌套SELECT查询
我有两张桌子。我有一个简单的内部连接查询,其中字段是从两个表中选择的,分别是Deals和Deals\u Country 两个表共享一个名为Id的字段。这是Deals中的主键,也是Deals\u Country中的外键。因此,id在交易中始终是唯一的,但在国家/地区的交易中并不总是唯一的 我想向我的简单内部联接查询添加进一步的条件。我只想返回在MA_DEALS_国家/地区有多个id的记录。请参见下面的示例Sql 带计数条件的嵌套SELECT查询,sql,sql-server,Sql,Sql Server,我有两张桌子。我有一个简单的内部连接查询,其中字段是从两个表中选择的,分别是Deals和Deals\u Country 两个表共享一个名为Id的字段。这是Deals中的主键,也是Deals\u Country中的外键。因此,id在交易中始终是唯一的,但在国家/地区的交易中并不总是唯一的 我想向我的简单内部联接查询添加进一步的条件。我只想返回在MA_DEALS_国家/地区有多个id的记录。请参见下面的示例 select DEALS.id, DEALS.field_b, DEALS_COUNTRY
select DEALS.id, DEALS.field_b, DEALS_COUNTRY.field_c DEALS_COUNTRY.field_d,
from DEALS
inner join DEALS_COUNTRY
on DEALS.id = DEALS_COUNTRY.id
where
(
select id
from DEALS_COUNTRY
group by id
having count(id) > 1
)
order by id
DEALS
id
AA11
AB34
AN21
BN44
DEALS_COUNTRY
id some_code
AA11 4506
AB34 5052
AB34 6161
AB34 0124
AN21 6322
AN21 9548
BN44 0012
结果
Deal.id Deal_Country.some_code
AB34 5052
AB34 6161
AB34 0124
AN21 6322
AN21 9548
另一种方法是在()上使用count()
select DEALS.id, DEALS.field_b, DEALS_COUNTRY.field_c DEALS_COUNTRY.field_d,
from DEALS
inner join DEALS_COUNTRY
on DEALS.id = DEALS_COUNTRY.id
where exists
(
select x.id
from DEALS_COUNTRY x
where x.id = DEALS.id
group by x.id
having count(x.id) > 1
)
order by deal_id
SELECT
id
, field_b
, field_c
, field_d
FROM (
SELECT
DEALS.id
, DEALS.field_b
, DEALS_COUNTRY.field_c
, DEALS_COUNTRY.field_d
, COUNT(*) OVER (PARTITION BY DEALS_COUNTRY.id) AS cnt
FROM DEALS
INNER JOIN DEALS_COUNTRY
ON DEALS.id = DEALS_COUNTRY.id
) AS sq
WHERE cnt > 1