首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询中的查询语法错误

问MySQL查询中的查询语法错误
EN

Stack Overflow用户
提问于 2011-11-30 10:06:58
回答 5查看 2.7K关注 0票数 1

这是我的问题:

代码语言:javascript
复制
SELECT
   `i`.`itemtype` AS `Item`,
   `p`.`name`
   (SELECT SUM(`i`.`count`) AS `Count` WHERE `itemtype` = 2148),
   (SELECT SUM(`i`.`count`) * 100 AS `Count1` WHERE `itemtype` = 2152),
   (SELECT SUM(`i`.`count`) * 10000 AS `Count2` WHERE `itemtype` = 2160)
FROM `player_items` AS `i`
LEFT JOIN `players` AS `p` ON (`p`.`id` = `i`.`player_id`)
WHERE `i`.`itemtype` IN (2148, 2152, 2160)
GROUP BY `i`.`itemtype`
LIMIT 0, 30

当我在mysql中运行上面的查询时,我得到这个错误消息:

代码语言:javascript
复制
#1064 - You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near
'SELECT SUM(`i`.`count`) AS `Count` WHERE `itemtype` = 2148)
   , (SELECT SUM(`i`' at line 4

我完全不明白这是什么意思,因为我在MySQL上是个乞讨者。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-30 10:11:13

在此列后面缺少逗号:

代码语言:javascript
复制
`p`.`name`

请考虑下面的查询:

代码语言:javascript
复制
SELECT i.itemtype AS Item
   , p.name
   , SUM(CASE 
            WHEN itemtype = 2148 THEN i.count
            ELSE 0
         END) AS Count
   , SUM(CASE
            WHEN itemtype = 2152 THEN i.count
            ELSE 0
         END) * 100 AS Count1
   , SUM(CASE
            WHEN itemtype = 2160 THEN i.count
            ELSE 0
         END) * 10000 AS Count2
FROM player_items AS i
LEFT JOIN players AS p ON i.player_id = p.id
WHERE i.itemtype IN (2148, 2152, 2160)
GROUP BY i.itemtype ASC
LIMIT 0, 30

要将这三列相加,您可以:

代码语言:javascript
复制
SELECT t.itemType AS Item, t.Count, t.Count1, t.Count2
   , SUM(t.Count1, t.Count2, t.Count3) AS Total
FROM
(
   SELECT i.itemtype AS Item
      , p.name
      , SUM(CASE 
               WHEN itemtype = 2148 THEN i.count
               ELSE 0
            END) AS Count
      , SUM(CASE
               WHEN itemtype = 2152 THEN i.count
               ELSE 0
            END) * 100 AS Count1
      , SUM(CASE
               WHEN itemtype = 2160 THEN i.count
               ELSE 0
            END) * 10000 AS Count2
   FROM player_items AS i
   LEFT JOIN players AS p ON i.player_id = p.id
   WHERE i.itemtype IN (2148, 2152, 2160)
   GROUP BY i.itemtype ASC
   LIMIT 0, 30
) AS t

或者,您可以添加另一个CASE

代码语言:javascript
复制
SELECT i.itemtype AS Item
   , p.name
   , SUM(CASE 
            WHEN itemtype = 2148 THEN i.count
            ELSE 0
         END) AS Count
   , SUM(CASE
            WHEN itemtype = 2152 THEN i.count
            ELSE 0
         END) * 100 AS Count1
   , SUM(CASE
            WHEN itemtype = 2160 THEN i.count
            ELSE 0
         END) * 10000 AS Count2
   , SUM(CASE
            WHEN itemtype = 2148 THEN i.count
            WHEN itemtype = 2152 THEN (i.count * 100)
            WHEN itemtype = 2160 THEN (i.count * 10000)
            ELSE 0
         END) AS Total
FROM player_items AS i
LEFT JOIN players AS p ON i.player_id = p.id
WHERE i.itemtype IN (2148, 2152, 2160)
GROUP BY i.itemtype ASC
LIMIT 0, 30

CASE statements使您不必运行另外三个SELECT语句来返回相同的结果。

票数 2
EN

Stack Overflow用户

发布于 2011-11-30 10:09:33

在您的所有SELECT SUM(...)中,您都没有定义FROM player_items AS i

票数 1
EN

Stack Overflow用户

发布于 2011-11-30 10:09:58

故障:-

代码语言:javascript
复制
SELECT SUM(`i`.`count`) AS `Count` <-- missing FROM which table

正确:-

代码语言:javascript
复制
SELECT SUM(`i`.`count`) AS `Count` FROM some_table ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8320306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档