【问题标题】:Duplicate rows showing up in the query with join operation使用连接操作在查询中显示重复行
【发布时间】:2023-03-20 03:01:01
【问题描述】:

我正在写这个查询

SELECT aw_offers_v3.id,aw_offers_v3.name 
FROM aw_offers_v3,aw_countries_v3,aw_categories_v3 
WHERE aw_offers_v3.id = aw_countries_v3.id 
AND aw_offers_v3.id = aw_categories_v3.id 
AND ( aw_offers_v3.api_key = 'a2a9e134bcb7935ecb6a1d989110650c016c91f17835d733aebd113255b4abb1' ) 
AND ( aw_offers_v3.network_id = 'http://api.hasoffers.com/v3/Affiliate_Offer.json' ) 
AND ( aw_countries_v3.country = 'Albania' OR aw_countries_v3.country = 'Armenia' ) 
AND ( aw_categories_v3.category = 'Casual' )

我得到了这个结果

|--------------------------------------|
|     id         |        name         |
|--------------------------------------|
|     11105      |        APP 3        |
|----------------|---------------------|
|     11107      |        APP 4        |
|----------------|---------------------|
|     11105      |        APP 3        |
|--------------------------------------|
|     11107      |        APP 4        |
|----------------|---------------------|

我不知道为什么我会得到这个重复的结果。实际表中没有重复数据。

这是我的 aw_offers_v3

|----------------------------------------------------------|
|     id         |        name         |        Desc       |
|----------------------------------------------------------|
|     391        |        APP 1        |       A           |
|----------------|---------------------|-------------------|
|     234        |        APP 2        |       B           |
|----------------|---------------------|-------------------|
|     11105      |        APP 3        |       bb          |
|----------------------------------------------------------|
|     11107      |        APP 4        |       thut        |
|----------------|---------------------|-------------------|

这是我的 aw_countries_v3

|----------------------------------------------------------|
|  internal_id   |      country        |        id         |
|----------------------------------------------------------|
|      1         |      Albania        |       11105       |
|----------------|---------------------|-------------------|
|      2         |      Armenia        |       11105       |
|----------------|---------------------|-------------------|
|      3         |     Argentina       |       11105       |
|----------------------------------------------------------|
|      4         |      Albania        |       11107       |
|----------------|---------------------|-------------------|
|      5         |      Armenia        |       11107       |
|----------------|---------------------|-------------------|
|      6         |       Andola        |       11107       |
|----------------------------------------------------------|

这是我的 aw_categories_v3

|----------------------------------------------------------|
|  internal_id   |      category       |        id         |
|----------------------------------------------------------|
|      1         |      Android        |       11105       |
|----------------|---------------------|-------------------|
|      2         |       Casual        |       11105       |
|----------------|---------------------|-------------------|
|      3         |       Sports        |       11105       |
|----------------------------------------------------------|
|      4         |       Gamimg        |       11107       |
|----------------|---------------------|-------------------|
|      5         |       Casual        |       11107       |
|----------------|---------------------|-------------------|
|      6         |       Sports        |       11107       |
|----------------------------------------------------------|

【问题讨论】:

  • 你试过了吗? group by aw_offers_v3.name
  • 不。我没有使用 group by....
  • 我认为 group by 可以解决您的问题

标签: mysql sql select join inner-join


【解决方案1】:

试试这个:

SELECT DISTINCT a.id, a.name 
FROM aw_offers_v3 a 
INNER JOIN aw_countries_v3 b ON a.id = b.id 
INNER JOIN aw_categories_v3 c ON a.id = c.id 
WHERE a.api_key = 'a2a9e134bcb7935ecb6a1d989110650c016c91f17835d733aebd113255b4abb1' AND 
      a.network_id = 'http://api.hasoffers.com/v3/Affiliate_Offer.json' AND 
      b.country IN ('Albania', 'Armenia') AND c.category = 'Casual'

【讨论】:

  • 我想说的一件事,如果您没有在查询中使用 Distinct,那么它会给出与我之前得到的相同的重复行......如果我在查询中输入 Distinct,那么我没有得到重复的行....那么使用内部联接有什么意义?
  • 好的,实际上我一般不使用 JOIN 关键字...无论如何谢谢...顺便说一下,如果我们不使用 DISTINCT,你能解释一下为什么我们会得到重复的行
  • @Saswat 原始查询具有内部联接。它只是使用了在FROM 子句中列出所有表的较旧的隐式语法。性能是一样的,这只是这些天的首选语法。
  • @Saswat 你得到重复,因为你有多个国家有相同的id。每一个都会在结果中产生一行。
猜你喜欢
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多