【问题标题】:MySQL Subqueries Not Working, Generating Error Code 1064MySQL 子查询不工作,生成错误代码 1064
【发布时间】:2010-12-16 09:35:32
【问题描述】:

此查询无效

SELECT * FROM Catalogue WHERE Catalogue.ID IN (
    SELECT ID_catalogue FROM Categories WHERE Categories.Product_type='xxx'
)

错误代码:1064 你有一个错误 'SELECT 附近的 SQL 语法 ID_catalogue FROM Categories WHERE Categories.Product_type='xxx' ) ' 在 第 2 行

好的,那是因为我使用的是非常旧的 MySQL 版本。

我想要得到的是

SELECT * FROM Catalogue WHERE Product_type='xxx' OR Catalogue.ID IN (
    SELECT ID_catalogue FROM Categories WHERE Categories.Product_type='xxx'
)

有什么等价的吗?

感谢你们所有的cmets。

【问题讨论】:

  • 你用的是什么mysql版本?好像你有一个 4.0 :-S
  • 你运行的是什么版本的 MySQL? 2003 年的 4.1 中添加了子查询支持。

标签: sql mysql mysql-error-1064


【解决方案1】:

如果您使用的是 mysql 版本

     SELECT c.*,
            g.ID_catalogue
       FROM Catalogue c
  LEFT JOIN Categories g ON g.ID_catalogue = c.ID
                        AND g.Product_type='xxx'
     HAVING ID_catalogue IS NOT NULL
         OR Product_type = 'xxx'

您应该为表 Categories 添加复合索引 ID_catalogue + Product_type 并为表 Catalogue 添加索引 Product_type 以快速执行此查询

【讨论】:

  • 我明白了。谢谢!现在是 3.23 :S
  • 3.23版是否有等效查询?
  • @aximili:最新的 3.23 版本是 2003 年 9 月 11 日发布的。我强烈建议您更新它:-S
  • 您必须将此查询重写为联接。这相当简单。但是你真的应该听从 zerkms 的建议,升级这台服务器。你落后了十年。
  • 大声感谢发布日期,很高兴知道! =p 抱歉,我的查询实际上有一个 OR,请参阅我更新的问题。谢谢 zerkms 和 Dan!
【解决方案2】:

您的查询没有问题。您的问题很可能是 MySQL 的版本。

【讨论】:

  • 正如 cmets 中已经介绍的那样。不要窃取 zerkms 的声誉。
  • @dan Zerkms 应该把它放在一个答案中。另请参阅其他回复。你也应该责备那个人是小偷。我不知道向其他 cmets 学习有什么问题,但我有勇气把它放在答案中,无论是对还是错。
  • @johnny:我不喜欢猜测。只有当我确定它是正确答案时,我才会回答。在这种特殊情况下,它也可以是select 子查询之前的某种非类型字符。
  • @zerkms 我不是说你必须这样做。我对你的反应更多。对不起,如果你冒犯了。有时我应该给出答案而不是评论。
猜你喜欢
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 2016-02-14
相关资源
最近更新 更多