【问题标题】:Select distinct of specific column on Inner Join选择内部联接上特定列的不同
【发布时间】:2018-11-01 10:13:27
【问题描述】:

我有一个表格,表示 Offer、Profiles 和 Skills 之间的三元关系。

任何给定的优惠都可以有多个个人资料,以及多个相关的技能。

类似这样的:

三元关系表

id_Offer    -   id_Profile  -   id_Skill
1           -   1           -   1
1           -   1           -   2
1           -   1           -   3
1           -   2           -   1
2           -   1           -   1
2           -   1           -   2
2           -   1           -   3
2           -   2           -   1

报价表

Offer   -   business_name
1       -   business-1
1       -   business-1
1       -   business-1
1       -   business-1
2       -   business-2 
2       -   business-2 
2       -   business-2 
2       -   business-2 

我想按个人资料进行查询过滤,并且只计算一次优惠,无论它关联了多少技能。

我正在执行类似以下查询的操作:

SELECT business_name, COUNT(*)
FROM Offer INNER JOIN
     ternary_relationship
     ON Offer.id_Offer = ternary_relationship.id_Offer AND
        id_Profile =  '1'
 GROUP BY business_name
 ORDER BY COUNT(*) DESC;

我已经看到 several possible 解决方案,但我无法让任何人为我的案子工作。当我为 id_Offer 命名或仅按 id_Offer 过滤时,它都不起作用。我总是在某处得到重复的条目。

【问题讨论】:

  • 您提供来自一个表的数据,其中包含三列。然后你有一个语法不正确的查询,提到了另外两个表和其他列。我对你拥有什么以及你想做什么感到很困惑。
  • 我将对其进行编辑以使其更清晰@GordonLinoff
  • 对于那个示例输入,你想要什么输出?为什么报价表中完全相同的数据重复了 4 次?
  • 子选择呢?
  • @MatBailie 我想要一个输出说明某个配置文件有多少报价:对于配置文件 1,有 2 个报价。不管有多少技能。报价表是一个快速制作的示例,我可以编辑更多随机数据,我以为我放了不同的 ID,什么没有。

标签: mysql sql join mariadb


【解决方案1】:

您可以使用JOINS 并一次性使用DISTINCT

select o.business_name, count(distinct tr.id_Offer) counts
from Offer o inner join 
     ternary_relationship tr on 
     o.Offer = tr.id_Offer 
where tr.id_Profile = ?
group by o.business_name
order by 2 desc;

【讨论】:

  • 您成功理解了这个问题,这是获得@monkey 需要的结果的正确方法,但是正如我在问题下面提到的那样,我认为三元表不是一个明智的解决方案。
  • 恐怕我无法使用这种类型的查询。什么是“ where tr.id_Profile = ?”在做什么?当你给出一个“?”时,它是如何在 sql 中调用的?到where子句?我收到以下错误: ERROR 1064 (42000): You have an error in your SQL syntax;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 '? 附近使用的正确语法。 ORDER BY COUNT(*) DESC' 在第 1 行
猜你喜欢
  • 2012-09-01
  • 2020-10-08
  • 2021-11-19
  • 1970-01-01
  • 2023-03-02
  • 2017-01-01
  • 1970-01-01
  • 2021-10-27
  • 2010-12-26
相关资源
最近更新 更多