2015-10-14 41 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,不是如果一個匹配和其他不要) –

相關問題