【问题标题】:Something wrong with Inner Join on TeradataTeradata 上的内部联接有问题
【发布时间】:2018-08-27 14:33:36
【问题描述】:

我必须在网络上的消费者身上找到一个特定的号码。客户建议使用table "abcd" 并确保满足manufacturer='big_company"。所以我在 Teradata 上运行了以下查询。

select count(*)from(select tel_num, manufacturer from abcd
where manufacturer='big_company'
and tel_num is not null)pqr

该查询运行正常,记录总数为6亿。

客户的另一个问题是,在网络上的消费者中,有多少人选择了特定的服务。我被要求使用表“wxyz”并确保满足 postpaid=1 条件。为了实现这一点,我必须在 tel_num 上创建 abcd 和 wxyz 之间的内部连接。以下是我使用的查询:

select cast (count (*)as bigint) from (select a.tel_num, b.postpaid from 
abcd as a inner join wxyz as b on a.tel_num=b.tel_num
where a.manufacturer='big_company'
and b.postpaid=1) xyz

上述查询生成 50 亿条记录。

这看起来很奇怪,因为我使用了内连接,所以第二个查询中的记录数应该少于 6 亿。我只是无法弄清楚我哪里出错了。

【问题讨论】:

  • 它可能会使用 join 为您提供重复记录.. 使用 DISTINCT 类似 COUNT ( DISTINCT a.tel_num) 进行检查
  • 我想知道在使用内部联接时如何获取重复值。
  • 谢谢。使用 Distinct 解决了这个问题。谢谢一堆???我想知道我是如何忘记使用 Distinct 的基本规则的。感觉像个无赖???

标签: mysql teradata-sql-assistant


【解决方案1】:

正如@useless'MJ 已经在评论中指出的那样,您可能会从表wxyz 中获得每个tel_num 的多个结果。您可以通过使用EXISTS 像在

select cast (count (*)as bigint) 
from abcd a
where exists (select 1 from wxyz b
  where a.tel_num=b.tel_num and b.postpaid=1)
and a.manufacturer='big_company'

【讨论】:

  • 我想知道在使用内部联接时如何获取重复值。
  • 您的评论帮助我理解了为什么每个 tel_num 可以得到多个结果。谢谢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
相关资源
最近更新 更多