我有3张桌子:
links (id, linkName)
tags (id, tagName)
tagsBridge (tagID, linkID)
我正在尝试支持在SOF中显示相关标签。因此,如果您点击标签“XYZ”,现在我显示标签“XYZ”的所有链接,但我还想显示人们标记了那些标记为“”XYZ“的项目的所有其他标签的清晰列表
查询此
的最快方法是什么答案 0 :(得分:3)
尝试:
SELECT t.tagname
FROM TAGS t
JOIN TAGS_BRIDGE tb ON tb.tagid = t.id
JOIN (SELECT li.id
FROM LINKS li
JOIN TAGS_BRIDGE tb ON tb.linkid = li.id
JOIN TAGS t ON t.id = tb.tagid
WHERE t.tagname = 'XYZ') x ON x.id = tb.linkid
GROUP BY t.tagname
答案 1 :(得分:2)
一个非常难看的嵌套查询。
SELECT DISTINCT tagName FROM tags WHERE id in
(
SELECT tagID FROM tagsBridge WHERE linkID IN
(
SELECT linkID FROM tagsBridge WHERE tagID IN
(
SELECT id FROM tags WHERE tagName like 'XYZ'
)
)
)
答案 2 :(得分:0)
编辑:现在这基本上只是一种写作Kirk Broadhurst的方式,我想。我猜有些数据库可能会在幕后以不同方式处理它,但我认为几乎所有现代引擎最终都会有两个具有相同查询计划的引擎。
select distinct t.tagName
from tags t
join tagsBridge tb on (t.id = tb.tagID)
join tagsBridge tbt on (tb.linkID = tbt.linkID)
join tags ta on (ta.id = tbt.tagID)
where ta.tagname = 'XYZ'