mysql - 连接和组合多个表 MYSQL

标签 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 将语言表与 form_trans 表链接起来,并使用 lang_id <> id 关系将语言表与 form_trans 表链接起来)

最佳答案

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

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)

你的错误:

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

关于mysql - 连接和组合多个表 MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30053129/

相关文章:

java - Mysql数据截断: Data truncation: Out of range value for column 'column' at row 1

mysql - 查询结果的where子句

SQL 分组依据状态

MySQL 连接禁用词表

mysql - SQL计数(选择)查询

php - 我的单选按钮在网页上不可见

php - 在 php 中检测 mysql 支持

mysql - 我怎样才能获得每个名字的最大值(value)

sql - SQL Server中的数据根据​​父子关系排序

mysql - 学习使用 SQL 的高级功能