0

MySQL では、次の表 (image_tags) が与えられます。

image_id | tag_id
-----------------
1        | 100
1        | 20
2        | 100
3        | 20

tag_id=100 AND tag_id=20 の行を選択したいのですが、この場合の望ましい結果は次のようになります。

image_id
--------
1        

試してみましたが、純粋な SQL で行う適切な方法が見つかりませんでした。ありがとう!

4

7 に答える 7

3

image_id( , tag_id) ペアが一意であると仮定します。

SELECT image_id
FROM image_tags
WHERE tag_id IN ('20', '100')
GROUP BY image_id
HAVING count(*) = 2
于 2013-07-17T10:45:33.177 に答える
1

これを試してください:

SELECT image_id FROM MyTable
WHERE tag_id IN (100,20)
GROUP BY image_id
HAVING COUNT(*) = 2

すべての行を選択したい場合は、これを試してください:

SELECT * FROM MyTable
WHERE image_id IN
(
    SELECT image_id FROM MyTable
    WHERE tag_id IN (100,20)
    GROUP BY image_id
    HAVING COUNT(*) = 2
)

このSQLFiddleを参照してください

于 2013-07-17T10:41:44.253 に答える
1

単純な JOIN クエリ

SELECT a.image
FROM image_tags a
INNER JOIN image_tags b ON a.image_id = b.image_id AND b.tag_id = 20
WHERE a.tag_id = 100

またはカウントを使用しますが、画像のタグが重複している場合は対処します

SELECT DISTINCT image_id
FROM image_tags
WHERE tag_id in ('20', '100')
GROUP BY image_id
HAVING count(DISTINCT tag_id) = 2
于 2013-07-17T10:46:25.433 に答える
0

あなたがしたことは正しいです。これを試すこともできます

select * from image_tags where tag_id in ('100','20',....)

于 2013-07-17T10:39:52.420 に答える
0
SELECT Image_ID FROM 
(SELECT Image_ID FROM tab
WHERE Tag_ID = 100) tag100
JOIN
(SELECT Image_Id FROM tab
WHERE TagID = 20) tag20

これがあなたが探しているものだと思います.TagID が 20 で、TagID が 100 の両方を持つレコードが必要ですよね?

于 2013-07-17T10:41:46.367 に答える
0
select image_id 
from image_tags 
where image_id IN (
            select image_id 
            from image_tags 
            where tag_id = 100) 
AND tag_id = 20
于 2013-07-17T10:47:05.887 に答える