2015-10-14 75 views
0

有一个噩梦试图弄清楚如何从表中提取一些数据。MySQL DISTINCT在一列上,而不是与另一列匹配

表设置:

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'的地方!

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

+1

开始你没有任何WHERE子句。你需要像'WHERE ProductCode!='01'' – dan08

+0

那么''QuoteId'值可以出现在多行上,并附有不同的'ProductCode'值?或者'DISTINCT'在哪里进入呢? –

+0

你的意思是你想要那些出现在产品代码不同于'01''的行中的'QuoteId',或者你的意思是你想要表中的所有'QuoteId',*除了那些出现的在产品代码为'01'的任何一行上? –

回答

1
Select QuoteID from PRODUCTS where QuoteID NOT IN (select distinct QuoteID from PRODUCTS where ProductCode = '01') 

explanation-内部查询会给你所有具有ProductCode = '01'QuoteID的。该not in会给你休息

+0

这看起来不错,但它杀了phpMyAdmin试图运行它!我明天再去一次。 –

+0

在我放弃之前,这大概持续了20分钟。表格大约有450k行,我应该预计这需要多长时间才能运行。 –

+0

在这种情况下,你应该检查你的索引,不应该运行那么长的时间 –

1

这让所有从产品报价的id,其中产品代码不符合01

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

如果我正确理解他想要的东西 - 这不好,因为一些QuoteID可能有两个条目 - 一个是01而另一个没有。您的查询将返回错误的代码 –

+0

因此,如果需要,只需添加“DISTINCT”。 –

+0

@JohnBollinger - distinct将无济于事(这将有助于如果一个条目出现两次,并且两个不匹配01,不是如果一个匹配和其他不要) –

相关问题