2

1 つの 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

テーブルにクライアントIDが2回表示されているクライアント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 に答える
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 に答える