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其中有使用图形界面生成查询的查询生成器