【问题标题】:MySQL DISTINCT on one column and not matching another一个列上的 MySQL DISTINCT 与另一列不匹配
【发布时间】:2015-10-14 15:26:13
【问题描述】:

做了一场噩梦,试图弄清楚如何从表中提取一些数据。

桌子设置好了:

PRODUCTS
---------------
ID - Primary
QuoteID Int
ProductCode VarChar(30)

我正在尝试获取所有没有'01' 产品代码的QuoteID

我试过了: Select * from PRODUCTS group by QuoteID order by ProductCode asc 但这一切都错了,因为 ProductCode asc 的值以 1 开头。

我知道将列交换为 Int 会使生活更轻松,但该应用程序依赖于 '01' 而不是 '1' 的值!

如何修改我的查询以产生所需的结果?

【问题讨论】:

  • 您没有任何 WHERE 子句。你需要类似WHERE ProductCode != '01'
  • 那么同一个QuoteId值可以出现在多行上,伴随着不同的ProductCode值?否则DISTINCT 是从哪里来的?
  • 你的意思是你想要那些出现在任何行中产品代码不同于'01'QuoteIds,还是你的意思是你想要表格中的所有QuoteIds,除了出现在产品代码'01'的任何行上的那些?
  • 一个 QuoteID 会出现很多次,每个都有不同的 ProductCode。我正在尝试查找所有没有针对它存储 ProductCode 01 的 QuoteID,但相同的 QuoteID 也会存储我不需要的其他 ProductCode。

标签: mysql group-by distinct


【解决方案1】:
Select QuoteID from PRODUCTS where QuoteID NOT IN (select distinct QuoteID from PRODUCTS where ProductCode = '01')

解释- 内部查询将为您提供所有具有ProductCode = '01'QuoteIDnot in 会给你剩下的

【讨论】:

  • 这看起来不错,但它杀死了 phpMyAdmin 试图运行它!我明天再去一次。
  • 这运行了大约 20 分钟,然后我放弃了。表有大约 450k 行,我预计这需要多长时间才能运行。
  • 在这种情况下你应该检查你的索引,不应该运行那么长时间
【解决方案2】:

这会从产品代码不以 01 开头的产品中获取所有报价 ID

Select QuoteID from PRODUCTS where ProductCode not like '01%'

【讨论】:

  • 如果我正确理解他想要什么 - 这不好,因为某些 QuoteID 可能有两个条目 - 一个有 01,另一个没有。您的查询将返回它是错误的
  • 如果有必要,只需添加DISTINCT
  • @JohnBollinger - distinct 无济于事(如果一个条目出现两次并且两者都不匹配 01,则它会有所帮助,如果一个匹配而另一个不匹配,则不会)
  • @NirLevy,我明白你的意思。然而,这是一个解释问题,我们需要 OP 来澄清 he 的含义。
  • 在问题 cmets 中回答。
猜你喜欢
  • 2019-11-19
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多