满足多种条件的MySql

满足多种条件的MySql,mysql,conditional-statements,Mysql,Conditional Statements,我有一个表,其中一个ID可以有多个状态 | client_id | status_id | | 1 | 2 | | 1 | 3 | | 1 | 5 | | 2 | 2 | | 2 | 3 | | 2 | 6 | 问题是,如果客户机具有所有状态,即2,3,5(状态为2,状态为3,状态为5),那么只选择这些客

我有一个表,其中一个ID可以有多个状态

| client_id | status_id |
|     1     |     2     |
|     1     |     3     |
|     1     |     5     |
|     2     |     2     |
|     2     |     3     |
|     2     |     6     |
问题是,如果客户机具有所有状态,即2,3,5(状态为2,状态为3,状态为5),那么只选择这些客户机id,但mysql不允许直接选择

SELECT * FROM `klient_status` WHERE StatusID = 20 AND StatusID = 40

returns: MySQL returned an empty result set (i.e. zero rows).

这是因为您正在使用
子句而不是
子句中的
来检查同一列中的多个值:

SELECT *
FROM  klient_status
WHERE status_id  IN(2,3,5)
GROUP BY client_id
HAVING COUNT(*) = 3;

示例@我认为您正在尝试获取一个客户端id,该客户端id在表中出现两次。因此,将查询转换为您想要的英语:

获取此表中有状态为20的记录以及此表中另一个状态为40的记录的客户

在这种情况下,您需要使用子查询:

SELECT client_id 
FROM `klient_status` 
WHERE StatusID = 20 AND client_id IN
(
    SELECT client_id 
    FROM `klient_status` 
    WHERE StatusID = 40
)

你得到的错误是什么?如果客户至少遇到一个,而不是全部遇到,它会返回客户。哦,好的。。在这种情况下,您需要使用
groupby
HAVING
子句。检查更新的查询是否有效。为什么不接受第一个正确答案?恭喜你:D
SELECT client_id 
FROM `klient_status` 
WHERE StatusID = 20 AND client_id IN
(
    SELECT client_id 
    FROM `klient_status` 
    WHERE StatusID = 40
)