2016-11-28 97 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