加入并组合多个表MYSQL

时间:2015-05-05 12:36:14

标签: mysql sql join

将数据与MySQL结合出现问题。我有4个表彼此相关联的表。

exhibitions
-id
-name
-location
-form_id

form
-id
-name

form_trans
-id
-form_id
-lang_id
-content

languages
-id
-name
-code

正如您所注意到的,我将ID链接到彼此,以便我可以对任何表进行更改而无需双重操作。这是我第一手的询问:

SELECT a.id, a.name, b.name, c.name 
FROM `form` a, `exhibitions` b, `languages` c, `form_trans` d 
WHERE a.id = b.form_id 
AND d.form_id = a.id 
AND d.lang_id = c.id

此查询的问题在于,它没有采用与任何展览无关的表格。为此,我假设使用JOIN语句,但我不能围绕我必须使用的语句。我有这个,但它甚至不是一个有效的查询...

SELECT a.id, a.name
FROM `forms` a
OUTER JOIN `exhibitions` b ON a.id = b.form_id

抱歉,我没有描述我想要达到的目标。我想选择所有表单,我想匹配展览(我可以将form_id与表格表的id匹配),我希望将语言表中的语言与表单匹配(我通过链接form_trans来实现)使用id和form_id创建表单表,并使用lang_id<> id关系将语言表与form_trans表链接起来)

2 个答案:

答案 0 :(得分:1)

此查询应选择所有表单,即使他们没有展览或翻译:

SELECT f.id As FormId
     , f.name as FormName
     , e.name As exhibitionName
     , l.name As LanguageName
FROM `form` f
LEFT JOIN  `exhibitions` e ON(f.id = e.form_id )
LEFT JOIN `form_trans` ft ON(ft.form_id = f.id )
LEFT JOIN `languages` l ON(ft.lang_id = l.id)

你的错误:

  • 使用隐式连接而不是显式连接。
  • 使用任意别名而不是有意义的别名。

答案 1 :(得分:0)

试试这个,LEFT JOIN列出与右边的表没有对应关联的条目。所以在我们的情况下,我猜查询会像,

SELECT a.id, a.name, b.name, c.name FROM `form` a LEFT JOIN 
`exhibitions` b INNER JOIN `languages` c INNER JOIN `form_trans` d
 WHERE a.id = b.form_id AND d.form_id = a.id AND d.lang_id = c.id;

Haven未对该查询进行测试,但这应该可行。