2

以下のようなテーブルがあるとします。

row_id  record_id   tag_id
1       1           2
2       1           3
3       2           2
4       2           4
5       3           2
6       3           3

値 2 の tag_id を持つレコードを持っているが 3 を持っていない record_id を取得したいのですが、この場合、record_id 2 を取得したいと考えています。これを達成するためのより簡単で高速な方法はありますか? ありがとう。

編集:

私が得たSQL:

SELECT record_id
FROM table_A 
WHERE record_id NOT IN (SELECT record_id 
                         FROM table_A 
                         WHERE record_id IN (SELECT record_id 
                                              FROM table_A 
                                              WHERE tag_id = 2) 
                         AND tag_id =3) 
AND record_id IN (SELECT record_id FROM table_A WHERE tag_id = 2) GROUP BY record_id

また、各 record_id には、1 から任意の数の tag_id 値を含めることができます。

4

3 に答える 3

3

postgresql のクエリでbool_or()関数を使用できます。

select record_id from table1 group by record_id
having bool_or(tag_id = 2) and not bool_or(tag_id = 3);

SQL フィドル

于 2014-07-08T09:57:21.333 に答える
3

これは次のように簡単に記述できます。

SELECT record_id FROM table_A WHERE tag_id = 2
EXCEPT
SELECT record_id FROM table_A WHERE tag_id = 3;
于 2014-07-08T10:22:49.773 に答える