mysql(使用db2)多对多获取具有给定参数的所有记录

标签 mysql db2 many-to-many

给定具有多对多关系的表

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_serviceJOIN,例如:

    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/

相关文章:

mysql - 复制 MYSQL 数据库文件夹

php - PHP中的UPDATE准备语句问题

带检查的 php mysql 输入脚本

database - 尝试在 CentOS 8 上安装 DB2 连接器以请求 IBMi (AS400)

ruby-on-rails - 验证多对多关系中关联的存在

python - SQLalchemy 查询基于排除关系中的项目

mysql - 抛出“不是数组引用”错误

join - 带有连接查询的 DB2 更新

database - 如何将 db2 用户添加为 SYSADM

c# - 流利的 nhibernate 多对多与以下多对多映射