2013-08-18 45 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