什么是查询以获得“相关标签”像堆栈溢出(what is the query to get “rela

2019-09-02 11:24发布

我有3个表:

links (id, linkName)  
tags (id, tagName)  
tagsBridge (tagID, linkID)  

我试图支持显示像SOF相关的标签。 所以,如果你点击标签“XYZ”,现在我展示所有标签“XYZ”的链接,但我也想表明,人们已标记也已标记的项目”,‘XYZ’的所有其它标签的不同列表

什么是查询最快的方式

Answer 1:

尝试:

  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


Answer 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'
        )
    )
)


Answer 3:

编辑:现在这基本上是写柯克布罗德赫斯特的只是以不同的方式,我想。 我猜有些DB可能不同的方式处理它在幕后,但我认为几乎所有的现代引擎最终会与他们两个具有相同的查询计划。

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'


文章来源: what is the query to get “related tags” like in stack overflow