mysql - 如何连接来自不同表的多行和单行
问题描述
我正在尝试将用户、简历和 resume_experience 加入一行,但是
一个用户有多个resume_experience
并且只有一个resume
我如何加入他们并通过 job_position 和 job_category 进行比较?
或者这是不可能的,我必须为它编写另一个 sql 查询?
SELECT * FROM resume r
INNER JOIN job j ON j.job_category = r.resume_category
LEFT JOIN user u ON r.resume_user = u.user_id
LEFT JOIN resume_experience re ON re.resume_experience_position = j.job_position
WHERE j.job_id = 1 GROUP BY r.resume_user
以上是我的 sql 查询,但LEFT JOIN resume_experience
不工作。
resume
+-----------+-------------+-----------------+
| resume_id | resume_user | resume_category |
+-----------+-------------+-----------------+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 1 |
+-----------+-------------+-----------------+
job
+---------+--------------+--------------+--------------+
| job_id | job_employer | job_position | job_category |
+---------+--------------+--------------+--------------+
| 1 | 1 | 1 | 1 |
| 2 | 2 | 1 | 1 |
| 3 | 3 | 2 | 1 |
+---------+--------------+--------------+--------------+
resume_experience
+-----------------------+----------------------------+------------------------+
| resume_experience_id | resume_experience_position | resume_experience_user |
+-----------------------+----------------------------+------------------------+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
+-----------------------+----------------------------+------------------------+
user
+---------+-----------+
| user_id | user_name |
+---------+-----------+
| 1 | david |
| 2 | kelvin |
| 3 | bob |
+---------+-----------+
解决方案
如果您希望每个用户的单行结果,您可以将 group_concat 用于具有多个值的列
SELECT resume.* , group_concat(re.resume_experience_position)
FROM resume r
INNER JOIN job j ON j.job_category = r.resume_category
LEFT JOIN user u ON r.resume_user = u.user_id
LEFT JOIN resume_experience re ON re.resume_experience_position = j.job_position
WHERE j.job_id = 1
GROUP BY r.resume_user
左连接用于非加工值。对于减少行,您需要一个聚合函数和 group by ..
推荐阅读
- specflow - 自动构建后立即执行测试
- c# - 在基于 javascript 的网站上查找字符串并发起点击
- reactjs - 单元测试:用酶反应上下文 api 返回一个空对象
- bash - 将变量的值传递给复杂的命令
- spring-boot - 使用 gradle 为 Springboot 创建一个库而不做 bootJar
- javascript - Jest- JSDOM 在实例化 JSDOM 时将 HTML 传递给 Jest 中的 JSDOM 构造函数
- reactjs - 如何在 react-google-map 中删除所有标记而没有任何副作用?
- swift - 如何查询一个php页面并保存它返回给我的值?
- python - Matplotlib 为 plt 生成不需要的选项卡式窗口
- c - 可见的副作用序列