我是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&此示例中的常规将返回结果表中的第一个结果。
这有意义吗?是否有一个查询会执行此操作,或者这更像是我的数据库结构的问题?
非常感谢!
答案 0 :(得分:3)
尝试这样的事情:
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。