语法错误:except附近的SQL语句错误。

3
我正在尝试选择所有城市分支机构都有账户的人。 (使用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)); 

现在我收到如下错误信息:

ERROR 1064 (42000): 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 'EXCEPT (SELECT C.branch FROM accountholder AS B, account AS C WHERE B.accountnumber=' at line 1

但是我不知道问题出在哪里。是我太糊涂了还是哪里出了问题?
谢谢您的帮助。

1
你在MySQL手册的哪里找到了EXCEPT运算符? - user330315
在我们的脚本中,但它也不能与“not in”一起使用。 - haskellnoob
3个回答

6

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)); 

错误 1054 (42S22):'branch' 列在 'IN/ALL/ANY 子查询' 中未知。这是什么意思? - haskellnoob
1
账户表中似乎没有名为“branch”的列。 - John Conde
好的,现在它向我展示了所有城市外的客户.. 当我将“not in”改为“in”时,它会向我展示在城市的一个分支或另一个分支中的客户.. 我应该从头开始。无论如何,谢谢! - haskellnoob

2
正如其他人所说,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;

我对您的表格和列以及它们之间的关系进行了一些假设,因此这个查询只是一个猜测。 不要盲目运行并期望它能正常工作。 我建议您将其用作示例,并确认比较是否正确地针对您的数据进行。


谢谢你的帮助。我从未使用过“左外连接”,也许现在是时候这样做了。无论如何,没有错误。感谢你的方法,我会继续使用它! - haskellnoob
在不理解连接(及其变体)的情况下使用SQL,就像在不理解while循环的情况下使用任何其他编程语言一样。这是语言的基本部分。 - Bill Karwin

1
MySQL仅支持UNION,而不支持INTERSECTEXCEPT/MINUS。添加这些集合操作一直是一个长期的功能请求。

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

你可以在那个错误报告上投票选择“影响我”...

2
这不是一个答案,应该是一条评论。 - John Conde
2
@JohnConde,我不同意--这个回答解答了问题的提出方式,因为它解释了错误的原因。如果问题是“怎么样才能得到所需结果的不同查询”,那只是暗示。 - Bill Karwin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接