MySQL SELECT问题 - 可能很简单

时间:2016-11-28 17:26:06

标签: mysql

所以我目前面临一个问题。我想从我的表中选择一行(dlUser)。问题是当Active设置为'No'时,我们将重新使用dlUser编号。我将尝试使用下面的示例表进行解释:

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

所以我想选择dlUser,其中Active ='No',但也选择Active不是Yes。因此,我想在这里获得的输出将是dlUser:101(因为它当前没有“正在使用”,因此可以再次使用)。我们每次只能有1个dlUser号码“有效”。

非常感谢任何协助。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

听起来您想要选择未在任何行中列为活动状态的dlusers。这是一个简单的" NOT IN"查询,您选择所有的"不在"活跃用户列表。

试试这样:

procedure GetPathFromProcessList(List: TStringList);
var
  Shot: THandle;
  Proc: THandle;
  Data: TProcessEntry32;
  Path: array[0..MAX_PATH - 1] of Char;
begin
  Shot := CreateToolHelp32Snapshot(TH32CS_SNAPALL, 0); //TH32CS_SNAPPROCESS
  if (Shot <> 0) then
  try
    List.Sorted := True;
    List.Duplicates := dupIgnore;
    List.BeginUpdate;
    if (Process32First(Shot, Data)) then
    repeat
      // PROCESS_QUERY_LIMITED_INFORMATION = $1000
      Proc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, Data.th32ProcessID);
      if (Proc <> 0) then
      try
        if (GetModuleFileNameEx(Proc, 0, Path, MAX_PATH) <> 0) then
            List.Add(LowerCase(Path));
      finally
        CloseHandle(Proc);
      end;
    until (not Process32Next(Shot, Data));
    List.EndUpdate;
  finally
    CloseHandle(Shot);
  end;
end;

答案 1 :(得分:0)

我相信以下内容应该能满足我对你问题的理解。在表示例中,您只能返回dblUser 101。

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

如果您正在构建可能会成为非常大的表格,那么我不会推荐这种方法,因为查询将开始滞后。