2

次のようなテーブルがあります。

id    user_id    value
----------------------------
1     2          colour
2     2          receive_email
3     3          colour
4     3          receive_email
5     3          receive_info

このテーブルを user_id でグループ化します。私がやりたいことは、値「receive_info」を含まないグループのみを返すことです。したがって、上記の場合、user_id = 2 の 1 行が返されます。

私はいくつかのことを試しましたが、これが最新です:

SELECT id, user_id, value  
FROM table 
GROUP BY user_id 
HAVING value NOT IN('receive_info');

私も試しました:

SELECT id, user_id, value  
FROM table 
WHERE value NOT IN('receive_info') 
GROUP BY user_id;

これを行うと、値 = 'receive' を含むユーザーのレコードが返されます。

私がどこで間違っているのか誰にもわかりますか?

ありがとう

4

1 に答える 1

7
SELECT  DISTINCT user_id
FROM    tableName a
WHERE   NOT EXISTS
        (
            SELECT  1
            FROM    tableName b
            WHERE   a.user_id = b.user_id AND
                    value = 'receive_info'
        )

または使用してLEFT JOIN

SELECT  DISTINCT a.user_id
FROM    tableName a
        LEFT JOIN tableName b
            ON  a.user_id = b.user_id AND
                b.value = 'receive_info'
WHERE   b.user_id IS NULL

2つのクエリが出力されます

╔═════════╗
║ USER_ID ║
╠═════════╣
║       2 ║
╚═════════╝
于 2013-05-14T08:08:24.230 に答える