我有以下两张表。
BookmarkTag(BookmarkID,TagID) 标签(TagID,标题)
目前,我正在选择具有相应BookmarkID的所有标签。问题是我只想选择一次标记以避免重复结果,并且只返回最常出现的标记。
这是我当前的SQL查询:
SELECT Tag.Title
FROM `Tag` INNER JOIN BookmarkTag
WHERE BookmarkTag.BookmarkID = 1 AND Tag.TagID = BookmarkTag.TagID'
答案 0 :(得分:3)
您需要在ON
关键字之后的JOIN
子句中加入连接条件。 where
条款中的不
您正在将SQL89与SQL92语法混合使用。这可能有效,我还没有测试过,但速度更快。
SELECT Tag.Title
FROM `Tag` t
INNER JOIN BookmarkTag b ON (t.tagid = b.tagid)
WHERE B.BookmarkID = 1
GROUP BY t.tagid
ORDER BY count(*) DESC
为了使每个标记的结果唯一,请在tagid上执行group by
然后,您可以使用count(*)来order by
出现,以查看具有最高出现次数的标记浮动到顶部。
(尝试始终使用count(*)
因为它比count(afield)
更快
答案 1 :(得分:1)
SELECT t.Title, COUNT(*) AS TitleCount
FROM BookmarkTag AS bt
INNER JOIN Tag AS t ON t.TagID = bt.TagID
GROUP BY t.Title
ORDER BY TitleCount DESC
如果您想获得7个最受欢迎的标题,请在查询结尾处添加LIMIT 7
或任何其他数字。我的版本将按其受欢迎程度的降序生成所有内容。