【问题标题】:SQLite Multiple Subqueries LogicSQLite 多子查询逻辑
【发布时间】:2019-04-24 21:11:26
【问题描述】:

问题是要求一个人编写一个查询来查找员工的姓名(名字、姓氏),这些员工的经理在美国的一个部门工作。这是问题的链接,查看表格,https://www.w3resource.com/sqlite-exercises/sqlite-subquery-exercise-3.php

对于子查询,我对部门表和位置表之间的位置 ID 进行了左连接,然后我为 country_id 选择了“US”,并返回了 manager_id

对于外部查询,我选择 Employee 表,从子查询列表中选择 manager_ids。

    SELECT first_name, last_name
    FROM Employees
    WHERE manager_id IN (SELECT manager_id
        FROM Departments d LEFT JOIN Locations l ON d.location_id = l.location_id
        WHERE country_id = 'US')
    ORDER BY first_name;

使用我的代码,我没有得到正确的答案,结果与网站上显示的结果集/输出相同。 正确答案一共有三个子查询。我不明白包含涉及员工表的子查询(最外层子查询)的目的是什么。我知道这是我搞砸的地方,但不明白为什么。

    SELECT first_name, last_name 
    FROM employees 
    WHERE manager_id IN 
       (SELECT employee_id 
        FROM employees 
        WHERE department_id IN 
           (SELECT department_id 
            FROM departments 
            WHERE location_id IN 
                (SELECT location_id 
                 FROM locations 
                 WHERE country_id='US')));

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    你需要加入所有的表:

    select e.first_name, e.last_name
    from employees e 
    inner join employees m on m.employee_id = e.manager_id 
    inner join departments d on d.department_id = m.department_id
    inner join locations l on l.location_id = d.location_id
    where l.country_id='US'
    

    【讨论】:

    • 感谢您的回复。为什么你需要两个员工表呢?这就是我不明白的。
    • 这是一个自联接,因为列 manager_id 引用了它自己的表employees 中的列employee_id。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2014-10-29
    • 2011-10-19
    相关资源
    最近更新 更多