如何在此查询中添加额外的选择?

时间:2010-05-20 02:48:41

标签: sql join

我有三张桌子相关。

图片: id |文件名| filesize | ...

节点: image_id | TAG_ID

标签: id |名称

我正在使用此查询来搜索包含x标签的图片

SELECT images.* FROM images 
INNER JOIN nodes ON images.id = nodes.image_id 
WHERE tag_id IN (SELECT tags.id FROM tags WHERE tags.tag IN ("tag1","tag2")) 
GROUP BY images.id HAVING COUNT(*)= 2

问题是我需要检索检索到的图像包含的所有标签,我需要在同一个查询中。

这是搜索检索图像所包含的所有标签的实际查询:

SELECT tag FROM nodes 
JOIN tags ON nodes.tag_id = tags.id 
WHERE image_id = images.id and nodes.private = images.private 
ORDER BY tag

如何将这两个混合只有一个查询?

我需要结果中的所有图像表加上图像的标签。喜欢:     ID     文件名     文件大小     标签

也许如果可能是concat标签。

2 个答案:

答案 0 :(得分:1)

或许这样的事情?

SELECT i.id, t.name
FROM images i
    INNER JOIN nodes n ON n.image_id = i.id
    INNER JOIN tags t ON t.id = n.tag_id
WHERE i.id IN
(
    SELECT nodes.image_id 
    FROM nodes
        INNER JOIN tags ON tags.id = nodes.tag_id
    WHERE tags.name IN ('tag1', 'tag2')
)

答案 1 :(得分:0)

这个?

SELECT tag FROM nodes 
JOIN tags ON nodes.tag_id = tags.id 
WHERE image_id = images.id 
AND nodes.private = images.private 
AND image_id in (
   SELECT images.id FROM images 
   INNER JOIN nodes ON images.id = nodes.image_id 
   WHERE tag_id IN (SELECT tags.id FROM tags WHERE tags.tag IN ("tag1","tag2")) 
   GROUP BY images.id HAVING COUNT(*)= 2)
ORDER BY tag