13

私は相互参照表を持っています:

ID | tag
1  | 4
1  | 5
1  | 6
2  | 4
2  | 5
2  | 8
3  | 2

タグのセットのすべてに一致する ID を選択する必要があります。たとえば、タグが与えられた場合、'4','5'ID を取得し'1','2'ます。タグが与えられた場合、すべて'4','2'のタグに一致する ID がなかったため、ID を取得できませんでした。

また、タグが与えられた場合、'4','9'結果として得られる ID も得られません。これは、検索する'9'と値が返され、すべてのタグにNULL一致する ID がないためです。

ここ2日間、ずっと髪を抜いていました。うまくいけば、誰かが私を助けることができます。

4

1 に答える 1

22

WHEREクエリの考え方は、レコードの数を句で指定した値の数と一致させる必要があるということです。

SELECT ID
FROM tableName
WHERE tag IN (4, 8)
GROUP BY ID
HAVING COUNT(*) = 2

すべての ID のタグに一意の制約が指定されていない場合DISTINCTは、必要です

SELECT ID
FROM tableName
WHERE tag IN (4, 8)
GROUP BY ID
HAVING COUNT(DISTINCT tag) = 2
于 2012-12-11T13:23:02.760 に答える