我是mysql世界的新手,我在从数据库中获取所需数据时遇到了一些麻烦.
我有两张桌子……
结果
ID | TITLE | LOTS OF OTHER DATA |
1 | res1 | |
2 | res2 | |
3 | res3 | |
4 | res4 | |
5 | res5 | |
ID | RESULT_ID | CATEGORY NAME |
1 | 1 | purchase |
2 | 1 | single_family |
3 | 1 | conventional |
4 | 2 | usda |
5 | 3 | somecategory |
我正在尝试创建一个查询,该查询将选择属于查询中提供的所有类别的结果.例如,购买和购买的查询single_family&此示例中的常规将返回结果表中的第一个结果.
那有意义吗?是否有一个查询会执行此操作,或者这更像是我的数据库结构的问题?
非常感谢!
解决方法:
尝试这样的事情:
SELECT * FROM Results r
INNER JOIN Categories c on r.ID = c.RESULT_ID
WHERE c.name in ('purchase', 'single_family', 'conventional')
GROUP BY r.ID
HAVING COUNT(c.ID) = 3
带连接的基本选择将仅为结果1获取三行.
编辑:要确保在更改数据库时代码不会中断,应始终选择明确要求的字段:SELECT r.ID,.. FROM ..
因此,您基本上对所有类别的所有类别表进行简单连接,其中类别名称是列表中的名称之一.尝试手动运行3行,看看你得到的结果.
接下来按结果ID分组.这意味着您将共享相同结果ID的所有行聚合到一行中.最后一行表示我们正在过滤由3行聚合的聚合列.这意味着您只返回具有3个匹配类别的结果.
因此,这种方法的唯一问题是,如果您在Categories表中有重复的result_id,categoryname.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。