添加新表时SQL查询中断

时间:2016-09-11 13:50:59

标签: mysql sql

我有一个数据库,处理有关向谁发出通行证的信息。当某人失去通行证时,会重新签发,但会记录为第二期。

我试图写一个已发出的每个传递的查询,以及是否需要进行热插拔。

我已经在这里工作了:http://sqlfiddle.com/#!9/ed700/4

但是当我尝试将员工姓名添加到查询中时,它会中断(表示' on'子句中有一个未知的列):http://sqlfiddle.com/#!9/ed700/6(第3,15和25行有已添加)

我不知道造成这种情况的原因......

P.S。这是数据库结构的简化版本,以便于发布。

1 个答案:

答案 0 :(得分:5)

混合ansi Joins和非ansi Joins并不是一个好习惯。查询可以重写为:

SELECT
  PassProcessing.Serial AS Serial,
  Passes.Type AS CardType,
  PassProcessing.Issue AS IssueNumber,
  Employees.Name,
  (CASE WHEN sub.count > PassProcessing.Issue
   OR PassProcessing.Cancelled = 1
        THEN 1
        ELSE 0
  END) AS Hotlist

FROM Passes
JOIN PassProcessing ON Passes.ID = PassProcessing.Passes_ID
JOIN Employees ON Passes.Employee_ID = Employees.ID
LEFT JOIN
  (SELECT Passes_ID, COUNT(*) AS count
  FROM PassProcessing
  GROUP BY Passes_ID) sub
  ON PassProcessing.Passes_ID = sub.Passes_ID

可以找到确切原因on this page.

  

以前,逗号运算符(,)和JOIN都有相同的含义   优先级,因此连接表达式t1,t2 JOIN t3被解释为   ((t1,t2)JOIN t3)。现在JOIN具有更高的优先级,所以表达式   被解释为(t1,(t2 JOIN t3))。此更改会影响语句   使用ON子句,因为该子句只能引用列   在连接的操作数中,优先级的变化会发生变化   解释这些操作数是什么。