2

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

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

问题是,如果它们具有所有状态,即 2、3、5(status_id = 2 AND status_id = 3 AND status_id = 5),则仅选择那些 client_id,但 mysql 不允许直接这样做。

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

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

3 回答 3

3

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

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

例子@sqlfiddle

于 2012-08-31T09:38:30.530 回答
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
于 2012-08-31T09:38:43.137 回答
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
)
于 2012-08-31T09:46:18.027 回答