MySQL子查询不起作用,生成错误代码1064

时间:2010-12-16 00:42:54

标签: sql mysql mysql-error-1064

此查询不起作用

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

错误代码:1064   你有错误   您的SQL语法靠近'SELECT   ID_catalogue FROM Categories WHERE   Categories.Product_type ='xxx')'at   第2行

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

我想要的是

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

有没有相应的东西?

感谢您的所有意见。

2 个答案:

答案 0 :(得分:4)

如果您使用的是mysql版本< = 4.0 - 那么这就是原因,因为子查询是在4.1中添加的

     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'

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

答案 1 :(得分:3)

您的查询没有任何问题。这是MySQL的版本,很可能是你的问题。