首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql中使用outer join连接子表

在mysql中使用outer join连接子表
EN

Stack Overflow用户
提问于 2013-07-01 08:23:22
回答 1查看 57关注 0票数 0

我有一个关于外部连接的新手问题。我有5张表,结构如下。

代码语言:javascript
复制
employee (employee_id, name, address)
employee_benefits (employee_id, benefit_id, join_date)
insurance (insurance_id, name)
insurance_benefits (insurance_id, benefit_id)
benefit (benefit_id, title)

对于选定的员工,我需要选择福利与员工可用的全部或部分福利集匹配的所有保险。示例:

代码语言:javascript
复制
benefit(
    bn1, 1st benefit;
    bn2, 2nd benefit;
    bn3, 3rd benefit;
    bn4, 4th benefit; 
)

employee(
    123, bill jones, 123 main st;
    321, alex baldwin, 222 state st;
)

employee_benefits(
    123, bn1;
    123, bn2;
    123, bn4; 
    321, bn3;
    321, bn4;
)

insurance(
    ins1, 1st insurance;
    ins2, 2nd insurance;
    ins3, 3rd insurance
)

insurance_benefits(
    ins1, bn1;
    ins1, bn2;
    ins2, bn1;
    ins2, bn3;
    ins2, bn4;
    ins3, bn2;
    ins3, bn4;
)

给123号员工的。我需要选择具有完整福利列表或员工拥有的福利子集的所有保险,但不包括具有不是由员工持有的福利的实例。在上面的示例中,它将是ins1和ins3。

有没有一种方法可以使用外部连接来完成上述任务?

EN

回答 1

Stack Overflow用户

发布于 2013-07-01 08:44:21

您可以使用外连接来实现这一点,但我认为对子查询使用IN-clauses会更直观。

并非由employee 123持有的福利

代码语言:javascript
复制
SELECT benefit_id
  FROM benefit
 WHERE benefit_id NOT IN
        ( SELECT benefit_id
            FROM employee_benefits
           WHERE employee_id = 123
        )
;

提供上述任何福利的保险计划:

代码语言:javascript
复制
SELECT DISTINCT insurance_id
  FROM insurance_benefits
 WHERE benefit_id NOT IN
        ( SELECT benefit_id
            FROM employee_benefits
           WHERE employee_id = 123
        )
;

不提供上述任何福利的保险计划:

代码语言:javascript
复制
SELECT insurance_id
  FROM insurance
 WHERE insurance_id NOT IN
        ( SELECT DISTINCT insurance_id
            FROM insurance_benefits
           WHERE benefit_id NOT IN
                  ( SELECT benefit_id
                      FROM employee_benefits
                     WHERE employee_id = 123
                  )
        )
;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17396069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档