【问题标题】:Creating simple select on many-to-many relation在多对多关系上创建简单的选择
【发布时间】:2018-04-20 19:07:52
【问题描述】:

假设我有这张桌子:

country:
country_id,
country_name;

currency:
currency_id,
currency_name;

country_currency:
country_id,
currency_id;

我想选择并显示所有拥有两种或多种货币的国家。我的查询应该是什么样子?

【问题讨论】:

标签: mysql postgresql rdbms


【解决方案1】:

将所有表格与公共列连接起来,然后按 country_id 对结果进行分组,并计算每组的行数(或货币),如下所示。

SELECT A.COUNTRY_ID, COUNT(*) NUMBER_OF_CURRENCY 
FROM COUNTRY A 
    INNER JOIN COUNTRY_CURRENCY B ON A.COUNTRY_ID = B.COUNTRY_ID 
    INNER JOIN CURRENCY C ON B.CURRENCY_ID=C.CURRENCY_ID
GROUP BY A.COUNTRY_ID 
HAVING NUMBER_OF_CURRENCY > 1 ;

更好的查询是:

SELECT COUNTRY_NAME 
FROM COUNTRY 
WHERE COUNTRY_ID IN (
                    SELECT COUNTRY_ID 
                    FROM COUNTRY_CURRENCY 
                    GROUP BY COUNTRY_ID 
                    HAVING COUNT(*) > 1
                     );

【讨论】:

  • ... 或者只是 >1 。虽然这里的查询比绝对必要的要多得多
  • @Strawberry 我猜第二个查询是必要的。
  • 不。解决方案可以更简单,但操作想要显示国家,而不是国家 ID
  • 好的,很高兴看到你的回答。
  • 我们只需要看看操作员对我之前的评论的反应如何
猜你喜欢
  • 1970-01-01
  • 2014-03-17
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
相关资源
最近更新 更多