2011-06-23 35 views
0

以下查詢查找所有商店的導演。我認爲有一個更簡單的解決方案,我寧願使用。謝謝。這個MySQL查詢有更好的方法嗎?

SELECT s.ShopID, (EmployeeName+' '+EmployeeSurname) AS FullName FROM shop AS s 
JOIN WorksOn AS w ON s.ShopID = w.ShopID 
JOIN employee AS e ON w.EmployeeID = e.EmployeeID 
JOIN director AS d ON e.EmployeeID = d.EmployeeID 

TABLES

employee : EmployeeID, EmployeeName,EmployeeSurname 
shop: ShopID, Name, Address 
WorksOn: EmployeeID, ShopID 
director: EmployeeID 
+0

看起來很好,但檢索到的數據並沒有意義。你想展示所有的商店嗎?或所有商店+所有empoyees?那你爲什麼要加入導演表? – user194076

+1

@ user194076他加入了董事表作爲導演的過濾器。 – Karolis

+0

它做了什麼,它顯示了店鋪ID和導演員工的全名。即使我得到正確的結果,我認爲有一個更好的方法來做到這一點。是的,像Karolis說的 – EnexoOnoma

回答

1

這是一個非常簡單的查詢。根據你提供的信息,我沒有看到任何簡單的事情。

請原諒。是的,你可以在2個連接中做到這一點:

SELECT 
    w.ShopID, (EmployeeName+' '+EmployeeSurname) AS FullName 
FROM 
    WorksOn AS w 
    JOIN employee AS e ON w.EmployeeID = e.EmployeeID 
    JOIN director AS d ON e.EmployeeID = d.EmployeeID 
+0

我想它必須有一個只有2連接的解決方案。這就是我想要做的 – EnexoOnoma

+1

您可以做2個連接的唯一方法 - 將位列「IsDirector」放置在您的員工列中。 – user194076

+0

@桑帕斯是的。 @ user194076是對的。如果你想要簡單些,那麼你需要改變數據庫的結構。 – Karolis

1

這是該查詢的一些實際問題。根據您的使用方式,它們可能不是問題。但是,我猜你的情況並不令人滿意。所以這裏是我的問題:

  1. 如果沒有導演等的商店你沒有結果爲該商店。左加入它。
  2. 如果有2名董事和2名員工,您將獲得4條記錄。因此,您可以通過單獨查詢或通過GROUP BY和GROUP_CONCAT或其他聚合函數來解決此問題。
+0

它如何使用GROUP BY和GROUP_CONCAT進行更改?這是個人使用的問題,雖然不是很重要,但我正在努力工作。 – EnexoOnoma

+0

如果您按商店分組,那麼它只會爲您提供該商店的一條記錄,然後您可以使用group_concat(employee_id),group_concat(director_id),並將所有數據記錄在一條記錄中。如果您擁有一個擁有200名員工和20名董事的大型商店,最終將擁有4000條沒有GROUP BY或單獨查詢的記錄。 –

相關問題