满足多种条件的MySql
我有一个表,其中一个ID可以有多个状态满足多种条件的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),那么只选择这些客
| 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
)