我试图选择在城市所有分支机构拥有帐户的人。 (使用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
我没有看到问题。我是盲目还是愚蠢?
感谢您的帮助。
答案 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
,但不支持INTERSECT
和EXCEPT
/ 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;
我对你的表和列及其关系做了一些假设,所以这个查询只是猜测。 不要盲目地运行它并期望它能够正常工作。我请你以它为例来确认你的数据正确地进行了比较。