2016-11-28 96 views
0

所以我目前正面臨一個問題。我想從我的表中選擇一行(dlUser)。問題是當Active設置爲'No'時,我們會重新使用dlUser號碼。我將嘗試使用下面的示例表來解釋:MySQL SELECT問題 - 可能很簡單

|  ID | Active | dlUser | 
------------------------------------- 
|  1  | Yes | 100 | 
|  2  | No  | 100 | 
|  3  | No  | 101 | 
|  4  | No  | 101 | 

所以我想選擇dlUser其中主動=「沒有」,但也是在Active是也不是。因此,我希望在這裏獲得的輸出將是dlUser:101(因爲它目前不在使用中,因此可以再次使用)。我們每次只能有一個dlUser號碼「有效」。

任何援助將不勝感激。

預先感謝您。

+2

您可以爲每個「dlUser」選擇「Active」的不同值。如果結果只返回'否',就像dlUser 101的情況那樣,你知道你可以重用它。 – PhillipD

回答

0

聽起來好像你想要選擇那些在任何行上都沒有被激活的隊列。這是一個簡單的「NOT IN」查詢,您可以在其中選擇「不在」活動用戶列表中的所有dlUsers。

試試這樣說:

SELECT DISTINCT dlUser 
FROM t 
WHERE NOT dlUser NOT IN 
(SELECT dlUser 
FROM t 
WHERE Active = 'Yes') 
+0

Hiya @kbball, 由於某種原因,這會返回Active = Yes和Active = No值? 關於爲什麼會出現這種情況的任何想法? 編輯評論:混淆了兩個答案對不起! – DisplayName

0

我相信下面的應該滿足我你的問題的理解。在表例子,你給它只會返回dblUser 101

SELECT a.dlUser 
FROM `yourtable` a 
WHERE a.Active = 'No' 
AND a.dblUser NOT IN (SELECT dlUser FROM `yourtable` WHERE a.Active = 'Yes') GROUP BY a.dlUser; 

如果你正在構建什麼可能會成爲一個非常大的表,然後我不建議這樣做的這個方法,因爲查詢將開始趨於落後。

+0

您的第一個WHERE子句不是必需的,如果您不使用SELECT DISTINCT,那麼最終會出現重複項,但其他方式相同 – kbball

+0

對於重複項,您絕對是對的。修復。謝謝。關於第一個where子句,在某些版本中,在動態臨時表限制之前,我得到了更好的結果並帶有索引限制。 –

+0

Hiya @Aunt Jamaima,謝謝你的回覆。 這似乎是返回值爲零,即使我100%確信有dlUser號碼當前設置爲活動=否爲所有用戶。 – DisplayName