java - 通过过滤从多个表中选择数据
问题描述
我有三个表,我需要选择数据。
表之间的关系是多对多的。
人
ID | 名 | 姓 |
---|---|---|
1 | 艾玛 | 绿色的 |
2 | 汤姆 | 帕蒂森 |
3 | 伊恩 | 汤姆森 |
4 | 艾米丽 | 安德森 |
活动
ID | 姓名 |
---|---|
1 | 音乐 |
2 | 烹饪 |
3 | 足球 |
人员_活动
person_id | 活动编号 |
---|---|
1 | 1 |
1 | 2 |
2 | 2 |
2 | 3 |
3 | 3 |
4 | 1 |
4 | 2 |
4 | 3 |
我需要从人员和活动表中选择所有内容,但只能按活动名称过滤。因此,activity 为 Football 时的结果必须是下一个:
person_id | 名 | 姓 | 活动编号 | 活动名称 |
---|---|---|---|---|
2 | 汤姆 | 帕蒂森 | 2 | 烹饪 |
2 | 汤姆 | 帕蒂森 | 3 | 足球 |
3 | 伊恩 | 汤姆森 | 3 | 足球 |
4 | 艾米丽 | 安德森 | 1 | 音乐 |
4 | 艾米丽 | 安德森 | 2 | 烹饪 |
4 | 艾米丽 | 安德森 | 3 | 足球 |
我的查询看起来像下一个,但它没有过滤并返回所有人。
SELECT p.person_id, first_name, last_name, a.activity_id, activity_name FROM persons p
JOIN persons_activities pa ON p.person_id = pa.person_id
JOIN activities a ON a.activity_id = pa.activity_id
ORDER BY p.person_id, a.activity_id;
只有 person_id 映射到带有来自 persons_activities 表的 activity_name 的 activity_id 的人员才应返回。正确的查询必须是什么样子?
解决方案
据我了解,您的问题是如何正确过滤使用您的联接查询为给定的活动名称创建的虚拟表:
您连接表的查询:
``
SELECT p.person_id, first_name, last_name, a.activity_id, activity_name FROM persons p
JOIN persons_activities pa ON p.person_id = pa.person_id
JOIN activities a ON a.activity_id = pa.activity_id
ORDER BY p.person_id, a.activity_id;
``
过滤此虚拟表的建议:
1.你可以在条件中使用LIKE
子句,WHERE
以防你只知道列的值而不知道它的id。
查询过滤activity_name(你不知道id):
``
SELECT p.person_id, first_name, last_name, a.activity_id, activity_name FROM persons p
JOIN persons_activities pa ON p.person_id = pa.person_id
JOIN activities a ON a.activity_id = pa.activity_id
WHERE a.activity_name LIKE '%Football%';
``
2.如果您知道特定列的 id,则可以使用该列WHERE
。
查询过滤activity_name(你知道id):
``
SELECT p.person_id, first_name, last_name, a.activity_id, activity_name FROM persons p
JOIN persons_activities pa ON p.person_id = pa.person_id
JOIN activities a ON a.activity_id = pa.activity_id
WHERE a.activity_id=3;
``
推荐阅读
- javascript - 为什么两个都是字母“a”的字符串不相等?
- java - 整数序列(升序或降序)
- php - 致命错误:未捕获的 Swift_TransportException:无法使用 3 个可能的身份验证器在 SMTP 服务器上使用用户名进行身份验证
- javascript - 如何处理 nativescript 应用程序中的错误?
- arduino - 使用以太网校验和的 esp32 OTA 失败
- python - 烧瓶中表单的提交按钮不起作用
- java - Checking for space in an edittext
- java - 添加 actionPerformed 后组合框中的项目减少
- react-native - 如何在 react-native 中从 Firebase 设置 sendSignInLinkToEmail()?
- r - chartJSRadar 下载处理程序创建空 png