给定具有多对多关系的表
employee
--------
id
firstname
lastname
...
service
--------
id
name_nl
...
employee_service
----------------
employee_id
service_id
...
我正在构建一个搜索功能,我想要的是当有人输入一项服务(例如:CIV)时,它会检索拥有该服务的每个员工以及他或她拥有的所有其他服务/功能/关键字。到目前为止我已经让它工作了,但是查询不包括其他服务。
SELECT e.firstname, e.lastname, s.name_nl
FROM DB.employee e
LEFT JOIN DB.function f ON (f.id = e.function_id)
LEFT JOIN DB.employee_service es ON (e.id = es.employee_id)
LEFT JOIN DB.service s ON (es.service_id = s.id)
LEFT JOIN DB.employee_keyword ek ON (e.id = ek.employee_id)
LEFT JOIN DB.keyword k ON (ek.keyword_id = k.id)
WHERE e.deleted IS NULL
AND s.name_nl = 'CIV'
ORDER BY e.firstname asc
所以这给了我一个带有服务 CIV 的 John Doe,但是 John 还有许多其他我想检索的服务......
如果有人能提供帮助,我们将不胜感激! 提前谢谢!
ps:如果有必要,我很乐意澄清一些事情。
最佳答案
您应该再次使用employee_service
JOIN
,例如:
SELECT e.firstname, e.lastname, s.name_nl,
s2.name_nl
FROM DB.employee e
LEFT JOIN DB.function f ON (f.id = e.function_id)
LEFT JOIN DB.employee_service es ON (e.id = es.employee_id)
LEFT JOIN DB.service s ON (es.service_id = s.id)
LEFT JOIN DB.employee_keyword ek ON (e.id = ek.employee_id)
LEFT JOIN DB.keyword k IN (ek.keyword_id = k.id)
LEFT JOIN DB.employee_service es2 ON (e.id = es2.employee_id)
LEFT JOIN DB.service s2 ON (es2.service_id = s2.id)
WHERE e.deleted IS NULL
AND s.name_nl = 'CIV'
AND s2.id<>s.id
ORDER BY e.firstname asc
关于mysql(使用db2)多对多获取具有给定参数的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27012623/