MySQL Workbench,如何修复“此服务器版本的SELECT在此位置无效”错误

时间:2019-04-09 18:21:28

标签: mysql mysql-workbench

正如标题所述,MySQL Workbench正在报告错误。据我所知,错误是软件造成的,而不是MySQL造成的。但是,由于它在我的网站上不起作用,因此阻止了我对代码进行错误修复。

最初,我使用了此查询,该查询工作得很好,但速度非常慢,因为它在内部联接内部具有选择功能。

SELECT * 
FROM modeller AS m 
INNER JOIN 
bilder AS b ON b.ID = (
    SELECT ID FROM bilder AS b2 
    WHERE b2.modellID = m.id 
    ORDER BY filnavn 
    DESC LIMIT 1
) 
order by m.fornavn

所以我一直在寻找替代品,最后得到了这个:

SELECT *
FROM (
     SELECT p.*, 
             m.*, 
             row_number() over (partition by m.id order by filnavn desc) rono
     FROM modeller AS m
     INNER JOIN bilder AS B
               on B.modellID= m.ID
     ) x
     WHERE x.rono = 1

该查询应该执行的操作是通过3D模型数据库(“ modeller”)查找并在表“ bilder”中获取添加到该模型的最新图片。这是一对多的连接,bilder将modellID作为一列,它对应于modeller中的ID。

相反,我得到了错误

SELECT is not valid at this position for this server version, expecting : '(', WIDTH

任何提示或建议都会受到赞赏,尤其是不仅可以规避工作台错误,而且可以改善我的初始查询。

1 个答案:

答案 0 :(得分:0)

您可以尝试的替代方法是:

SELECT *
FROM modeller AS m
INNER JOIN (
   SELECT model1ID, MAX(filnavn) AS filnavnMax
   FROM bilder
   GROUP BY model1ID

) AS maxVals
   ON m.id = maxVals.model1ID
INNER JOIN bilder AS b 
   ON maxVals.model1ID = b.model1ID AND maxVals.filnavnMax = b.filnavn
ORDER BY m.fornavn
;

但是,如果filnavn对于model1ID不是唯一的,则最终结果可能比返回的原始查询更多。但是,在这种情况下,您的原始查询可能会提供不一致的结果(因为不能保证当多于一个具有最高filnavn的行时,从原始子查询返回的ID会保持一致)