【问题标题】:Intersection from one table一张桌子的交点
【发布时间】:2017-01-16 09:04:33
【问题描述】:

我想获得一张桌子的交集。 我的表格由出现在多个市场的产品组成。我怎样才能得到位置 A 和 B 的产品(例如这个苹果)?

product     market
apple       location A
apple       location B
orange      location C

【问题讨论】:

  • 您使用的是什么版本的 SQL?
  • 我正在使用 PL/SQL 11.2 Oracle 数据库 11g

标签: sql intersection


【解决方案1】:

这是一种选择:

SELECT product
FROM yourTable
WHERE market IN ('location A', 'location B')
GROUP BY product
HAVING COUNT(DISTINCT market) = 2

另一种可能性是使用条件聚合并计算给定市场与每种产品一起出现的次数:

SELECT product
FROM yourTable
GROUP BY product
HAVING SUM(CASE WHEN market = 'location A' THEN 1 ELSE 0 END) > 0 AND    -- appears in A
       SUM(CASE WHEN market = 'location B' THEN 1 ELSE 0 END) > 0        -- appears in B

【讨论】:

    【解决方案2】:

    您可以通过下面的“INNER JOIN”来实现这一点

    select t.product
    from product t
    inner join 
          (select product from product where market = 'location A') tt on t.product = tt.product
    where market = 'location B'
    

    【讨论】:

      猜你喜欢
      • 2014-07-13
      • 2012-05-23
      • 1970-01-01
      • 2013-12-30
      • 2017-02-07
      • 2011-11-17
      • 2011-10-09
      • 2020-07-29
      • 1970-01-01
      相关资源
      最近更新 更多