MySql满足多种条件

时间:2012-08-31 09:36:05

标签: mysql conditional-statements

我有一张桌子,其中一个ID可以有多种状态

| client_id | status_id |
|     1     |     2     |
|     1     |     3     |
|     1     |     5     |
|     2     |     2     |
|     2     |     3     |
|     2     |     6     |

问题是,只选择那些client_id,如果它们具有所有状态,即2,3,5(status_id = 2 AND status_id = 3 AND status_id = 5),但mysql不允许直接使用。

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

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

3 个答案:

答案 0 :(得分:3)

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

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

示例@ sqlfiddle

答案 1 :(得分:0)

SELECT `client_id`, COUNT(`client_id`) c_count 
FROM `table_name` 
WHERE `status_id` IN (2,3,5) 
GROUP BY `client_id` 
HAVING c_count = 3

答案 2 :(得分:0)

我认为您正在尝试获取客户端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
)