mysql - SQL-从表中获取在两列中共享一个值的所有记录

标签 mysql sql

标题有点模糊,就这样吧。

我有一个表:tag_tasks

这是一个连接表,有两列重要:tag_idtask_id

我想统计同时具有这两个标签的任务数。

例如:我有一个 task(id = 12) 和一个 tag(id = 24 和另一个 tag(id = 30)

在 tag_tasks 中我会有这些记录:

tag_id  task_id
24      12
30      12

比方说那里也有一些记录使它变得现实:

tag_id  task_id
24      12
30      12
36      43
24      45
56      98
24      115
30      115

只有当 task_id 与我的两个目标标签相关联时,我才想返回一条记录。在这种情况下,它只会是前两行 (task_id = 12) 和最后两行 (task_id = 115),然后得到总计数(在这种情况下,我的最终目标是返回数字 4)。

编辑 - 结果集

tag_id  task_id
    24      12
    30      12
    24      115
    30      115

但最后我想得到这样的结果(上述结果的总和):

task_count_for_both_tags_combined
4

这让我有点困惑,如果我能澄清我的问题,请告诉我。

谢谢。

编辑 - 我目前的结果 这段代码让我很接近,但我需要添加结果数字 - *请注意,这是当前数据集,我可以按 task_id 分组的行数*

SELECT COUNT( task_id ) AS task_count, tag_id
FROM  `tag_tasks` 
WHERE tag_id
IN ( 15, 11 ) 
GROUP BY task_id
HAVING task_count >1

这给我留下了这个结果,我需要以下总和:

task_count  task_id 
2           34
2           45

编辑 - SQLFIDDLE 示例 我刚刚了解到这个存在,所以这是来自其中一位数据集稍大的海报的不正确的 fiddle 答案。此 sql 最终选择了与我想要的标签不同的记录(31 和 32 而不是 JUST 24 和 30)。

http://www.sqlfiddle.com/#!2/116f9/1/0

最佳答案

这样的事情对计数部分有用吗:

select 2*count(task_id) where task_id in (select task_id where tag_id=24) and task_id in (select task_id where tag_id=30)

基本上,如果任务有两个标签,则将其添加到计数中并在最后加倍。可以回收 where 子句以进行一般选择以获取其他数据。

关于mysql - SQL-从表中获取在两列中共享一个值的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553330/

相关文章:

mysql - 如何在 MySQL 中返回数据透视表输出?

sql - 如何根据连续日期范围对数据进行分组?

java - INSERT INTO 在 Ucanaccess 中给出错误

php - MySQL - 通过一组数字的所有组合查找具有逗号分隔值的字段

php - MySQL 按另一个表的计数排序

mysql - 使用临时表中的值更新表中的多行

mysql - 如何连接/合并同一个表中的多个结果?

mysql 工作台未与 mac 上的本地主机连接,无法连接到 '127.0.0.1 上的 MySQL 服务器 (49)

mysql - 如何将 SQL 查询转换为 Laravel 格式

java - JFrame 显示不正确