mysql - SQL连接五张表
问题描述
我正在处理问题,但无法解决。
我有五张桌子:
t_employee = {employee_id_pk, fullname, phone, position, passport}
t_facility = {facility_id_pk, direction, title}
t_employee_facility = {emp_fac_id_pk, employee_id_fk, facility_id_fk}
this table is @ManyToMany relationship
between 't_employee' and 't_facility'
t_transport = {transport_id_pk, type}
t_trip = {trip_id_pk, trip_code, employee_id_fk, transport_id_fk}
this table is @ManyToMany relationship between 't_employee' and 't_transport'
我想获得独特的行我尝试过这样的事情
SELECT
employee_id, fullname, passport, phone, position, direction, title,
trip_code
FROM
t_facility
INNER JOIN t_employee_facility USING (facility_id)
INNER JOIN t_employee USING (employee_id)
INNER JOIN t_trip USING (employee_id)
GROUP BY
employee_id,
facility_id,
trip_code
有 8 个唯一行。但是上面的例子给了我 18 行,当我删除时trip_id
我得到 8 行,但在这种情况下,我得到trip_code
每个employee_id 的重复值。
我只想提取不重复的行。我想,我应该使用INNER JOIN
,但我不确定。
是否可以加入所有这些表?
谢谢你
问候
解决方案
可以使用嵌套连接查询来实现,如下所示:
SELECT B.employee_id, employee_id, fullname, passport, phone,
position,direction, title, trip_code
FROM (SELECT A.employee_id, employee_id, fullname, passport, phone,
position,direction, title
FROM (SELECT employee_id, direction, title FROM t_facility
JOIN t_employee_facility
ON t_facility.facility_id = t_employee_facility.facility_id
) AS A
JOIN employee ON A.employee_id = employee.employee_id) AS B
JOIN t_trip ON B.employee_id = t_trip.employee_id;
推荐阅读
- powershell - 更新 release def 导致错误 VS402903: The specified value is not convertible to type ReleaseDefinition
- java - 转换 XML 时禁用 JAXP 中的缩进
- rpg - Do know you an IDE online for language RPG
- xml - 我可以给 ConstraintLayout 一个“隐藏”变量吗?
- sql - 聚合函数和 unpivot
- java - Spring Boot 返回 404
- c++ - C++20 中的 constexpr std::vector 和 constexpr std::string
- python - 如何解决:IndexError:图像索引超出范围
- amazon-web-services - AWS S3 存储桶文件 - 将具有反斜杠的对象重命名为文件夹和文件
- java - Android 无法使用 Java 在套接字中发送两次 PrintWriter 消息。也可以发送 Python 代码而不是给我发送 Java 代码