SQL连接查询问题

时间:2017-05-18 16:10:46

标签: mysql sql sqlite inner-join

这是我的查询的简化版本。它在SQLite中运行没有问题,但在MYSQL中却不是这样。

错误:未知栏' tab2.key'在' on条款'

SELECT 
  tab2.key AS remarksId, 
  tab1.sessionDate AS date, 
  tab1.sessionStart AS startTime
FROM 
  table1 AS tab1, 
  table2 AS tab2, 
  table3 AS tab3, 
  table4 AS tab4
INNER JOIN 
  table5 AS tab5 
  ON 
    tab5.remarkId = tab2.key 
  WHERE 
    tab1.userId='<anyNumber>' AND 
    tab2.objectiveId='<anyKey>' AND 
    tab1.reportId=tab2.reportId AND 
    tab1.reportId=tab3.key AND 
    tab4.key=tab3.sortieId 
ORDER BY date, startTime;

把列放在`不幸的是没有帮助。

我不确定是否命名一个列&#39;键&#39;这是一个很好的做法(MYSQL Keywords),但由于现有的安装,我必须以某种方式处理这个问题。为了进行快速测试,我重命名了“&#39; -columns”列,但也没有取得任何成功。

非常感谢

1 个答案:

答案 0 :(得分:6)

简单地说,不要混合连接符号,如果给出选择,请使用当前的ANSI 92连接语法而不是89标准(是的......那是1992年的#1992;和1989年!)

其次...别名是为了帮助您保存输入并处理对同一个表的多个引用....所以...简化名称t1,t2,t3 ...

最后......如果你必须在mySQL使用反引号中使用保留/限制词。

SELECT t2.`key` AS remarksId 
FROM table1 t1
INNER JOIN table2 t2
   ON t1.reportId = t2.reportId 
INNER JOIN table3 t3
   ON t1.reportId = t3.`key`  
INNER JOIN table4 t4
   ON t4.`key` = t3.sortieId 
INNER JOIN table5 t5
   ON t5.remarkId = t2.`key`
WHERE t1.userId = '<anyNumber>' 
  AND t2.objectiveId = '<anyKey>'  
ORDER BY `date`, startTime;