【问题标题】:how to get only distinct value with join statement and 2 databases如何使用连接语句和 2 个数据库仅获得不同的值
【发布时间】:2021-07-15 12:41:45
【问题描述】:

我有 2 个数据库,想从中取出 1 个表 从 database1.table1 我想取一列名为 deeplink 从 database2.table2 我想取 4 列 name , brand_name , category_name 和 item_sold_30d

这是我当前的查询,但是在列名中出现重复

如何摆脱它?

select distinct(b.name),b.item_sold_30d , b.brand_name ,b.category_name, a.deeplink
from database1.table1 a
INNER join database2.table2 b on b.name = a.product_name
where brand_name ='' order by b.item_sold_30d DESC  

代码很好,但我得到了我不想要的重复名称。

我的输出 here is the output of my query

【问题讨论】:

  • MySQL 还是 SQL Server?请更正您的标签。
  • DISTINCT 不是一个函数,它是SELECT DISTINCT 的一部分 - 并且适用于整个选定的行。跳过那些额外的括号,只需写select distinct b.name, b.item_sold_30d ... 以使代码更清晰。
  • 向我们展示一些示例表数据和预期结果 - 全部为格式化文本(无图像)。尽可能简化。 minimal reproducible example.
  • 还是有重复,我忘了补充说我的表包含越南名字是不是因为这个?
  • @samirahassan 。 . .当有多个匹配时,你想要哪一行?您的问题不完整。

标签: mysql sql sql-server


【解决方案1】:

如果您只想要不同的名称,只需选择distinct(b.name),如下所示

select distinct(b.name)
from database1.table1 a
INNER join database2.table2 b on b.name = a.product_name
where brand_name ='' order by b.item_sold_30d DESC

如果您在select 中有多个columns,即使您使用distinct(b.name),它也会使用select 中提到的所有columns 获取不同的行。

注意: distinct 不能应用于select 语句中的columns 的一部分。它将适用于select 中指定的所有columns。因此,您的结果中会出现重复的名称,但这些结果将作为一整行不同。

select distinct(b.name),b.item_sold_30d , b.brand_name ,b.category_name, a.deeplink
from database1.table1 a
INNER join database2.table2 b on b.name = a.product_name
where brand_name ='' order by b.item_sold_30d DESC

从问题的 cmets 部分更新:

请运行这个示例小提琴并检查两个结果。除非您决定如何处理 deeplink 列,否则您无法删除重复的行。 dbfiddle

如果您不关心深度链接并且可以使用任何一个值,请使用下面的查询。

更新:

SELECT name
    ,item_sold_30d
    ,brand_name
    ,category_name
    ,deeplink
FROM (
SELECT DISTINCT b.name,b.item_sold_30d , b.brand_name ,b.category_name, a.deeplink, ROW_NUMBER() OVER (PARTITION BY b.name,b.item_sold_30d , b.brand_name ,b.category_name ORDER BY a.deeplink) as rowId
FROM TABLE1 a
INNER JOIN TABLE2 b ON b.name = a.product_name
WHERE brand_name ='' ORDER BY b.item_sold_30d DESC
) dt
WHERE dt.rowId = 1

dbfiddle

【讨论】:

  • 感谢@Annamalai 回复我,那么如何在语句中添加其他列?
  • 您可以添加其他具有不同的列,但它不仅适用于名称,它会选择所有提到的列的不同行。
  • 如果您仍然需要澄清或帮助以实现结果,请提供您当前查询的输出以及您试图实现的结果
  • 谢谢你的解决方案,但我只有一行
  • 你用上面的查询得到结果了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 2019-03-09
  • 2017-01-30
  • 2010-09-19
  • 1970-01-01
  • 2021-07-02
  • 2011-12-20
相关资源
最近更新 更多