为什么这个SQL代码会抛出错误

时间:2017-05-21 12:32:01

标签: mysql sql

我有一个SQL代码,用于根据赢得的比赛和播放的比赛计算排行榜的排名:

SELECT count(1) 
FROM `account` 
WHERE points < SELECT points FROM (SELECT `display name`, 3*`wins`-`matches played` AS points FROM `account`) AS T WHERE `display name` = "valaki"

如果我更改了胜利点或任何现有字段,那么不等式的左边部分正在工作,左边部分也有效,但代码不起作用。

1 个答案:

答案 0 :(得分:1)

您需要在子查询周围使用括号:

SELECT count(1)
FROM account a
WHERE a.points < (SELECT 3*a2.wins-a2.matchesplayed AS points
                  FROM account a2
                  WHERE a2.displayname = 'valaki'
                 );

此外,您将列称为matches playeddiplay name。这是不正确的。您需要使用空格在列名称周围转义字符。我的建议是修改列名,这样就不需要对它们进行转义。

我还添加了表别名。这是一个好习惯。如果查询引用多个表或具有多个FROM子句,它们确实应该是必需的。