【问题标题】:Mysql select multiple tables but inner join on one tableMysql选择多个表但在一个表上进行内部连接
【发布时间】:2012-01-28 12:08:36
【问题描述】:

是否可以选择多个表并在其中一个表上进行内部连接?例如

SELECT * 
FROM table1 AS t1, table2 AS t2, table3 AS t3
INNER JOIN table4 AS t4 ON t1.row3 = t4.row3
INNER JOIN table5 AS t5 ON t1.row4 = t5.row4
WHERE ...

这种特殊情况给我带来了问题。它给了我一个错误-'on 子句'中的未知列“t1.row3”。我不知道是否可以选择多个表但在其中一个表上进行内部联接。

【问题讨论】:

  • 这些是您的实际表名和列名吗?
  • 不,这些不是我的实际表和列名,但它们是相似的。我需要选择 3 个表,在一个表上我需要进行内部连接,而在其他两个表上只需简单的选择。

标签: mysql inner-join multiple-tables


【解决方案1】:

JOIN 操作数的优先级高于逗号 , 操作数,因此连接被有效地视为

t1, t2, (t3, t4, t5 ON ... )

在 t1、t2、t3 周围加上括号。

SELECT * 
FROM  ( table1 AS t1, table2 AS t2, table3 AS t3 )
INNER JOIN table4 AS t4 ON t1.row3 = t4.row3
INNER JOIN table5 AS t5 ON t1.row4 = t5.row4
WHERE ...

您也可以将查询编写为:

SELECT * 
FROM  table1 AS t1
INNER JOIN table2 AS t2
INNER JOIN table3 AS t3
INNER JOIN table4 AS t4 ON t1.row3 = t4.row3
INNER JOIN table5 AS t5 ON t1.row4 = t5.row4
WHERE ...

因为逗号等价于不带连接条件的 INNER JOIN。

【讨论】:

  • 实际上我没有看到现在作为结果我多次得到同一行... row1,row1,row1,row2,row2,row2 ....
猜你喜欢
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
相关资源
最近更新 更多