mysql:查找具有多个标记和相同id的行

mysql:查找具有多个标记和相同id的行,mysql,sql,select,join,Mysql,Sql,Select,Join,我在计算mysql时遇到了一个问题,即在连接两个表时,如何查找具有两个特定“标记”和相同“hashid”的链接 假设我的表格如下所示: 链接 标签 我想返回标记为“有用”和“很棒”的行 用于按1标记查找链接的当前(工作/快速)查询: SELECT links.title, links.numsaves FROM links LEFT JOIN tags ON links.md5=tags.md5 WHERE tags.tag = 'useful' ORDER BY links.numberofs

我在计算mysql时遇到了一个问题,即在连接两个表时,如何查找具有两个特定“标记”和相同“hashid”的链接

假设我的表格如下所示:

链接

标签

我想返回标记为“有用”和“很棒”的行

用于按1标记查找链接的当前(工作/快速)查询:

SELECT links.title, links.numsaves FROM links LEFT JOIN tags ON links.md5=tags.md5 WHERE tags.tag = 'useful' ORDER BY links.numberofsaves DESC LIMIT 20
在阅读了一篇文章后,我尝试使用以下方法:

SELECT links.title, links.numsaves FROM links LEFT JOIN tags ON links.md5=tags.md5 GROUP BY tags.md5 HAVING SUM(tags.tag='useful') AND SUM(tags.tag='awesome') ORDER BY links.numberofsaves DESC LIMIT 20
这确实有效,但速度之慢令人难以置信,以至于无法使用


有人知道解决方案吗?

这类问题被称为
Relational Division

SELECT  a.md5, 
        a.url,
        a.title
FROM    Links a
        INNER JOIN Tags b
            ON a.md5 = b.md5
WHERE   b.Tag IN ('awesome', 'useful') -- <<== list of desired tags
GROUP   BY a.md5, a.url, a.title
HAVING  COUNT(*) = 2                   -- <<== number of tags defined

@JW웃 , 这会导致查询速度变慢吗?
SELECT links.title, links.numsaves FROM links LEFT JOIN tags ON links.md5=tags.md5 GROUP BY tags.md5 HAVING SUM(tags.tag='useful') AND SUM(tags.tag='awesome') ORDER BY links.numberofsaves DESC LIMIT 20
SELECT  a.md5, 
        a.url,
        a.title
FROM    Links a
        INNER JOIN Tags b
            ON a.md5 = b.md5
WHERE   b.Tag IN ('awesome', 'useful') -- <<== list of desired tags
GROUP   BY a.md5, a.url, a.title
HAVING  COUNT(*) = 2                   -- <<== number of tags defined
╔══════╦════════════╦═══════╗
║ MD5  ║    URL     ║ TITLE ║
╠══════╬════════════╬═══════╣
║ a0a0 ║ google.com ║ foo   ║
╚══════╩════════════╩═══════╝