2

我已經在我的數據庫表的結構如下:SQL查詢與外鍵字段的表引用其他外鍵字段

[table workers] 
ID [PK] | worker | combined [FK] 
--------+--------+--------------+ 
1  | John | 2 
--------------------------------+ 
2  | Adam | 1 

[table combined] 
ID [PK] | name | helper [FK] 
--------+----------------------+ 
1  | name1 | 1 
2  | name2 | 2 

[table helper] 
ID [PK] | department [FK] | location [FK] 
--------+-------------+------------------- 
1  |  2   |  3 
2  |  1   |  1 

[table departments] 
ID [PK] | department 
--------+-------------+ 
1  | Development | 
2  | Production | 

[table location] 
ID [PK] | department 
--------+--------------+ 
1  | Paris  | 
2  | London  | 
3  | Berlin  | 

表「工人」有外國鍵字段(「組合」)。 「組合」表具有一個字段名稱和一個外鍵字段「助手」,該助手再次是具有兩個外鍵字段的表格。

我的問題是,現在,什麼是最簡單的SQL查詢來獲取下表:

[table workers] 
ID [PK] | worker | combined-Name| department | location 
--------+--------+--------------+------------+----------- 
1  | John | name2  | Development| Paris 
--------------------------------+------------+----------- 
2  | Adam | name1  | Production | Berlin 

我試了一下已有的左JOINS但沒有管理它讓所有的「clearnames」來表中「工」

+0

PK和FK不需要查詢。需要的是一行在表格(基本或查詢)中所說的內容。 PS我猜''clearnames''你的意思是非id值。請盡力清楚。特別是當你將這個任務轉移到我們身上時,請不要使用恐嚇引語作爲表面呼救的幫助。 – philipxy

回答

1

該查詢將工作:

SELECT w.ID, worker, c.name AS `combined-Name`, d.department, l.department as 
location FROM workers w 
LEFT JOIN combined c ON c.ID = w.combined 
LEFT JOIN helper h ON h.ID = c.helper 
LEFT JOIN departments d ON d.ID = h.department 
LEFT JOIN location l ON l.ID = h.location 
GROUP BY w.ID 

我用AS關鍵字的名稱設置爲您首選的輸出。

這在本地使用提供的結構和數據進行了測試。

它基本上是4個簡單的左連接,然後不是選擇ID的,而是選擇外表的名稱列。

c.name別名被引用,因爲我們需要躲避特殊字符-

-1

使用下面的查詢:

select [workers].worker,[combined].name as combined-name,[departments].name as department,[location].name as location from [workers] 
left join [combined] on [workers].combined = [combined].combined 
left join [helper] on [helper].ID = [combined].helper 
left join [departments] on [departments].ID = [helper].department 
left join [location] on [location].ID = [helper].location 
+0

表名的括號是什麼?這是相當無效的SQL ... – FMashiro

+0

@FMashiro FYI .. [鏈接](https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-identifiers) –

+0

您的代碼生成一個erorr MySQL,這個問題不是MsSQL: '意外的字符。 (在位置14處的「[」附近) 意外的字符。 (靠近「]」位置20) 無法識別的關鍵字。 (位置15附近的「桌子」) 意外的標記。 (在位置20附近的「]」) SQL查詢:文檔 SELECT * FROM [table] WHERE 1 #1064 - 您的SQL語法錯誤;檢查與您的MariaDB服務器版本相對應的手冊,以便在'[table] WHERE 1'在第1行'附近使用正確的語法 – FMashiro

0

如果你是新來的MySQL,那麼你可以使用MySQL客戶端工具SQLyog其中有使用圖形界面生成查詢的查詢生成器