【问题标题】:Nested SELECT query with COUNT condition带有 COUNT 条件的嵌套 SELECT 查询
【发布时间】:2014-08-13 07:59:30
【问题描述】:

我有两张桌子。我有一个简单的内部联接查询,其中的字段是从两个表中选择的,即 Deals 和 Deals_Country。

两个表共享一个名为 Id 的字段。这是 Deals 中的主键和 Deals_Country 中的外键。因此,ID 在 Deals 中始终是唯一的,但在 Deals_Country 中并不总是唯一的。

我想在我的简单内部联接查询中添加更多条件。我只想返回 MA_DEALS_COUNTRY 中有多个 id 的记录。请看下面的示例。

 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   

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    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
    

    【讨论】:

      【解决方案2】:

      另一种方法是使用 count() over()

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-25
        • 2012-05-03
        • 1970-01-01
        • 1970-01-01
        • 2022-08-07
        • 1970-01-01
        • 2014-01-22
        相关资源
        最近更新 更多