我有一张桌子,其中一个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).
答案 0 :(得分:3)
这是因为您使用AND
子句而不是IN
子句来检查同一列中的多个值:
SELECT *
FROM klient_status
WHERE status_id IN(2,3,5)
GROUP BY client_id
HAVING COUNT(*) = 3;
答案 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
)