2013-08-18 80 views
0

请注意,我有不同的问题类似的主题,哪个MySQL选择查询是正确的

我正在学习MySQL。我遇到了一些选择题。 如果我怀疑答案是什么或者不确定是否正确,我开始搜索谷歌,stackoverflow和mysql站点。 但是对于一些人来说,我仍然无法确定正确答案是什么。

因此我在这里问这个问题。

问题: 表Employees已创建。您想要检索至少有一个人向其报告的员工的信息。您将执行以下哪项查询来完成此任务?

  • A. SELECT employee_id, last_name, job_id, department_id FROM Employees WHERE employee_id EXISTS(SELECT manager_id WHERE manager_id is NULL);

  • B. SELECT employee_id, last_name, job_id, department_id FROM Employees HAVING employee_id IN(SELECT manager_id FROM Employees WHERE manager_id is NOT NULL);

  • C. SELECT employee_id, last_name, job_id, department_id FROM Employees outer WHERE EXISTS (SELECT 'x' FROM Employees WHERE manager_id = outer.employee_id);

  • D. SELECT employee_id, last_name, job_id, department_id FROM Employees HAVING employee_id WHERE employee_id IN (SELECT manager_id WHERE manager_id is NOT NULL);

    • A和d不具有FROM条款subquery。我猜这是无效的(或只是在错误中的错字?)
    • 建议的答案是C.但我相信这是行不通的,因为保留关键字“外部”用作别名在这里。如果我错了,请纠正我。
    • 所以实际上只剩下B了。
    • 答案D顺序不正确。 (WHERE应在HAVING之前)
    • 答案A无效,因为subquery查询IS NULL

如果你有关于这个问题/答案或我的任何言论发表任何言论,我很高兴听到它!

+2

在C,'outer.employee_id'等于' Employees.employee_id'顺便说一句。虽然,这不是为了做作业或测试吗? :P(B) – KarelG

+0

我正在准备认证,并在互联网上发现了一些示例问题。请注意,OUTER是一个保留关键字。所以我会认为这是行不通的。或者我错了? – th3penguinwhisperer

+0

当我在测试表上尝试C时,我得到:从外部WHERE存在的SELECT id(SELECT'x'FROM emp WHERE mid = outer.id); 错误1064(42000):您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行的外部WHERE存在(SELECT'x'FROM emp WHERE mid = outer.id)'附近使用正确的语法 – th3penguinwhisperer

回答

0

根据给定的信息B似乎是正确的一个修正,应该有地方,而不是任何具有声明,但可以更好地告诉你,如果你上传的数据库架构

+0

奇怪。我用一个有2个colums的表重新创建了这个例子:id和mid(注意没有提供数据库模式)。然后放入几个条目。如果他们没有经理,留下一些中间栏为空。查询:选择id,mid从emp中有id(从emp中mid选择非空)。它只给我有人向他们报告的条目。请注意,这个问题是关于MySQL的。也许其他数据库服务器在having子句上有不同的行为。 – th3penguinwhisperer