2016-11-28 11 views
0

私は現在問題に直面しています。テーブルから行(dlUser)を選択したいと思います。問題は、「アクティブ」が「いいえ」に設定されている場合、dlUser番号を再利用することです。私は、以下の例の表を使って説明しよう:MySQL SELECTの問題 - おそらく単純

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

は、だから私は、Active =「いいえ」dlUserを選択するだけでなく、アクティブではありませんです。したがって、ここで取得しようとしている出力は、dlUser:101です(現在は「使用中」ではないため、再度使用できます)。私たちはいつでも各dlUser番号のうちの1つだけを "Active"にすることができます。

ご協力いただければ幸いです。

ありがとうございます。

+2

「dlUser」ごとに「アクティブ」の別個の値を選択できます。結果がdlUser 101の場合のように 'No'を返すだけであれば、再利用することができます。 – PhillipD

答えて

0

どの行にも表示されていないdlusersを選択するように思えます。これは簡単な「NOT IN」クエリで、アクティブユーザーのリストに「入」していないすべてのdluserを選択します。

はこのようにそれを試してみてください。

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

Hja @kbball これは何らかの理由でActive = YesとActive = Noの両方の値を返していますか? これはなぜそうなるのでしょうか? コメントを編集:2つの答えを混ぜて申し訳ありません! – 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、ご返信ありがとうございます。 これは、すべてのユーザーに対して現在Active = Noに設定されているdlUser番号が100%確信していても、ゼロの値を返すようです。 – DisplayName

関連する問題