2013-08-18 1 views
0

У меня есть схожие темы с различными вопросами,Какой правильный запрос для MySQL

Я учусь MySQL. Я наткнулся на несколько вопросов с множественным выбором. Если я сомневаюсь, что ответ был или не был убежден, что это правильно, я начал искать google, stackoverflow и сайт mysql. Однако для некоторых я все еще не мог подтвердить, какой был правильный ответ.

Поэтому я задаю здесь вопрос.

Вопрос: Таблица Employees создана. Вы хотите получить информацию о тех сотрудниках, у которых есть хотя бы один человек, подотчетный им. Какой из следующих запросов вы выполните для выполнения задачи?

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

  • Б. 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);

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

  • Д. 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);

    • А и 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 на тестовой таблице, я получаю: SELECT id из emp external WHERE существует (SELECT 'x' FROM emp WHERE mid = внешний.id); ERROR 1064 (42000): У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с «внешним WHERE» (SELECT 'x' FROM emp WHERE mid = outer.id) 'в строке 1 – th3penguinwhisperer

ответ

0

Согласно данной информации B кажется правильным с поправкой, что должно быть там, где и не имея в любое заявление, но может лучше сказать вам, если вы загрузите DB схемы

+0

Странно. Я воссоздал этот пример с таблицей, содержащей 2 столбца: id и mid (обратите внимание, что нет схемы db). Затем введите несколько записей.Оставил несколько столбцов в столбце, если у них не было менеджера. Query: select id, mid от emp, имеющего id (выберите mid от emp, где mid не равно null); Это только дает мне запись, в которой люди сообщали о них. Обратите внимание, что этот вопрос касается mysql. Возможно, другие серверы db имеют другое поведение в условии наличия. – th3penguinwhisperer