提取仅具有status = 1的用户-对同一列进行Mysql查询

rta7y2nd  于 2022-11-28  发布在  Mysql
关注(0)|答案(2)|浏览(120)

我想要一个不应该有零状态的user_id的列表。
比如说,我有一个任务表,它有用户id和状态。我试图写一个查询来获取用户id,它只有状态= 1,而不是2。对于下面的表,它应该得到只有状态=1的表的用户id;
用户表
| 标识符|等等|
| - -|- -|
| 100个|任何事|
| 二百|任何事|
| 三百|任何事|
任务表:
| 标识符|用户标识|状态|
| - -|- -|- -|
| 一个|100个|一个|
| 2个|100个|2个|
| 三个|二百|2个|
| 四个|三百|一个|
| 五个|二百|2个|
| 六个|三百|一个|
我已尝试过此查询

SELECT user_id FROM tasks where status =2 and status != 1;

上面的用户ID 100有两个任务,一个状态为1,另一个状态为2,我不想要该用户。上面的用户ID 200有两个任务,但没有一个状态为1,这就是我想要的。上面的用户ID 300有两个状态为1的任务,我也不想要它。
状态1表示未完成。因此,我需要一个查询,该查询应仅获取具有零个未完成任务的用户。如果它同时具有状态1和状态2,则我不需要该查询。
我尝试了多次查询,但无法找到它。

bvjxkvbb

bvjxkvbb1#

我有一个用户ID为status的任务表。我正在尝试编写一个查询来获取status仅为1而不是2的用户ID

SELECT *
FROM users
WHERE EXISTS ( SELECT NULL
               FROM tasks
               WHERE users.id = tasks.user_id
                 AND statis IN (1)       -- must have 1
               )
  AND NOT EXISTS ( SElECT NULL
                   FROM tasks
                   WHERE users.id = tasks.user_id
                     AND statis IN (2)   -- must not have 2
                   )

若要测试多个值,请根据WHERE .. AND statis IN (..)列表中的列表放置值。

inkz8wg9

inkz8wg92#

通过将子查询IN()/NOT IN()结合使用,您可以构建任务状态为1/2的用户列表,并根据这些列表筛选您的用户:

SELECT *
FROM users
WHERE
    -- ensure the user has at least 1 task in status 1
    id IN(
        SELECT user_id
        FROM tasks
        WHERE status = 1
    )
    -- ensure the user has no task in status 2
    AND id NOT IN(
        SELECT user_id
        FROM tasks
        WHERE status = 2
    )

相关问题