2013-03-31 48 views
3

在數據庫中,我有一個用戶名錶,並且我有管轄權表。我也有一箇中間表來分配一個用戶到一個或多個司法管轄區。基於中間表中的列選擇MySql語句

僱員表

  • 用戶ID(主密鑰)
  • 的firstName
  • lastName的

記錄:

+--------+-----------+----------+ 
| userID | firstName | lastName | 
+--------+-----------+----------+ 
|  6 | John  | Doe  | 
|  11 | lisa  | lopez | 
+--------+-----------+----------+ 

個管轄表

  • jurId(主鍵)
  • 區域

記錄:

+-------+--------------+ 
| jurID | jurisdiction | 
+-------+--------------+ 
|  1 | California | 
|  2 | Texas  | 
|  3 | Washington | 
|  4 | South Dakota | 
|  5 | Alaska  | 
|  6 | Ohio   | 
+-------+--------------+ 

user_jurisdiction

  • 用戶ID(Foriegn鍵指向員工的用戶ID)
  • jurID(Foriegn鍵指向轄區jurID)

記錄:

+--------+-------+ 
    | userID | jurID | 
    +--------+-------+ 
    |  6 |  2 | 
    |  6 |  3 | 
    |  11 |  2 | 
    +--------+-------+ 

我一直在嘗試了幾個小時拿出一sql語句將選擇/列出來自「Texas」的所有工作人員。我一直在使用這條SQL語句的很多爭吵,但沒有成功:

SELECT jurisdictions.jurisdiction, 
     employees.firstName 
FROM jurisdictions, 
     employees 
     INNER JOIN user_jurisdictions 
      ON user_jurisdictions.jurID = jurisdictions.jurID AND 
       user_jurisdictions.userID = employees.userID 
WHERE jurisdictions.jurisdiction = "Texas"; 

但我沒有成功。什麼sql語句會得到從jurisdictions.jurisdiction =「Texas」涉及的員工名單;

回答

2

你現在正在做的是你從桌上製作catersian產品:employeesjurisdictions。連接的正確語法是顯式定義兩個表之間的連接類型。

SELECT a.*, c.* 
FROM employees a 
     INNER JOIN user_jurisdiction b 
      ON a.userID = b.userID 
     INNER JOIN jurisdictions c 
      ON b.jurID = c.jurID 
WHERE c.jurisdiction = 'Texas' 

輸出電流查詢

╔════════╦═══════════╦══════════╦═══════╦══════════════╗ 
║ USERID ║ FIRSTNAME ║ LASTNAME ║ JURID ║ JURISDICTION ║ 
╠════════╬═══════════╬══════════╬═══════╬══════════════╣ 
║  6 ║ John  ║ Doe  ║  2 ║ Texas  ║ 
║  11 ║ lisa  ║ lopez ║  2 ║ Texas  ║ 
╚════════╩═══════════╩══════════╩═══════╩══════════════╝ 

爲了進一步獲得更多的知識有關的加入,請訪問以下鏈接:

+0

謝謝。 「員工」與「員工是否一樣」? – dman

+1

@dhee是的。 'AS'關鍵字是*可選的*。 –

+0

即使我認爲我沒有使用/需要主鍵,我的中間表是否會受益於主鍵? – dman

2
SELECT 
e.* 
FROM 
jurisdictions j, user_jurisdiction uj, employees e 
WHERE 
uj.jurID = j.jurID AND 
uj.userID = e.userID AND 
j.jurisdiction = 'Texas'; 
+0

這條語句如何在沒有內連接的情況下工作? – dman

+0

它是一個顯式連接,相當於INNER JOIN語法 –