0

さて、私は3つのテーブル、、 images(ID, name,..)および tags(ID, name, ..)1つの接続を持つテーブルを持っていますimage_tags(imageID, tagID)

これが私の問題です。2つ以上の特定のタグIDを持つすべての画像を取得するクエリを作成しようとしています。

簡単そうに聞こえるかもしれません。1つのタグを持つすべての画像を取得し、他の画像があるかどうかをすべて確認することでそれを実行できることはわかっていますが、パフォーマンスのコストが少し高すぎます。

この件に関するご意見をいただければ幸いです。

4

3 に答える 3

0

これを試して

SELECT images.ID, COUNT(DISTINCT tags.ID) as counter FROM images
LEFT JOIN image_tags ON (images.ID=image_tags.imageID)
LEFT JOIN tags ON (image_tags.tagID=tags.ID)
GROUP BY images.ID HAVING COUNT (tags.ID) >=2
于 2012-08-31T11:40:54.983 に答える
0

私はあなたが望むクエリはこれだと思います:

SELECT images.ID, COUNT(DISTINCT tags.ID) as counter
FROM image_tags it
group by it.imageID
having max(case when it.tagID = 1020 then 1 else 0 end) = 1 and
       max(case when it.tagID = 1016 then 1 else 0 end) = 1

group byは、特定の画像のすべてのタグをまとめます。持っている句は、必要な2つのタグがあることを確認します。これらの2つのタグのみが必要な場合は、次の句を追加できます。

max(case when it.tagID not in (1020, 1016) then 1 else 0 end) = 0
于 2012-08-31T13:23:24.730 に答える
-1

それはあなたのために働きますか?

SELECT * from image_tags i1, image_tags i2
WHERE i1.imageID = i2.imageID
AND i1.tagID != i2.tagID
于 2012-08-31T11:34:37.667 に答える