语法附近的SQL错误除外

时间:2014-11-26 14:05:01

标签: mysql sql database mysql-error-1064

我试图选择在城市所有分支机构拥有帐户的人。 (使用SQL查询)

SELECT A.customId 
FROM accountholder as A 
WHERE NOT EXISTS ( 
                   (SELECT name 
                    FROM branch 
                    WHERE city='LA') 
EXCEPT (SELECT C.branch 
        FROM accountholder AS B, account AS C 
        WHERE B.accountnumber = C.accountnumber 
              AND A.customId = B.customId)); 

现在我得到了:

  

错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在#" EXCEPT附近使用正确的语法(SELECT C.branch FROM accountholder AS B,account AS C WHERE B.accountnumber =' at line 1

我没有看到问题。我是盲目还是愚蠢?

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

MySQL不使用EXCEPT。使用NOT IN

SELECT A.customId 
FROM accountholder as A 
WHERE branch NOT IN ( 
(SELECT name FROM branch WHERE city='LA') 
AND branch NOT IN (SELECT C.branch FROM accountholder AS B, account AS C WHERE B.accountnumber = C.accountnumber AND A.customId = B.customId)); 

答案 1 :(得分:1)

MySQL仅支持UNION,但不支持INTERSECTEXCEPT / MINUS

添加这些设置操作是一项长期存在的功能请求

http://bugs.mysql.com/bug.php?id=1309

你可能想投票"影响我"关于那个错误报告......

答案 2 :(得分:1)

正如其他人所说,MySQL不支持EXCEPT操作。您将不得不重写您的查询。

如果在除了持有账户持有人账户的分支机构之外没有其他分支机构,您似乎在查询账户持有人。

这是一个粗略的猜测:

SELECT A.customId
FROM accountholder AS A
JOIN account AS C 
  ON A.accountnumber = C.accountnumber
LEFT OUTER JOIN branch AS B
  ON C.branch <> B.name AND B.city = 'LA'
WHERE B.city IS NULL;

我对你的表和列及其关系做了一些假设,所以这个查询只是猜测。 不要盲目地运行它并期望它能够正常工作。我请你以它为例来确认你的数据正确地进行了比较。