我的SQL运算符有什么问题?
当我从我的表Stats和Book中选择BookID时,我会得到期望的结果,如下所示:我的SQL运算符有什么问题?,sql,mysql-error-1064,sql-except,Sql,Mysql Error 1064,Sql Except,当我从我的表Stats和Book中选择BookID时,我会得到期望的结果,如下所示: MariaDB [db1]> SELECT BookID From Book WHERE Author = 'AuthorX'; +--------+ | BookID | +--------+ | 1003 | +--------+ MariaDB [db1]> SELECT BookID From Stats WHERE BookID >= 1000; +--------+ | B
MariaDB [db1]> SELECT BookID From Book WHERE Author = 'AuthorX';
+--------+
| BookID |
+--------+
| 1003 |
+--------+
MariaDB [db1]> SELECT BookID From Stats WHERE BookID >= 1000;
+--------+
| BookID |
+--------+
| 1010 |
| 1005 |
| 1003 |
+--------+
但是当我尝试使用EXCEPT操作符时,我得到了一个错误
MariaDB [db1]> (SELECT BookID From Stats WHERE BookID >= 1000)
-> EXCEPT
-> (SELECT BookID From Book WHERE Author = 'AuthorX');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'EXCEPT (SELECT BookID From Book WHERE Author = 'AuthorX')' at line 1
我希望得到的结果是:
+--------+
| BookID |
+--------+
| 1010 |
| 1005 |
+--------+
我做错了什么?
我试过带括号和不带括号,但不知道下一步该怎么办
编辑:尝试不在
SELECT BookID From Stats WHERE BookID >= 1000 NOT IN
(SELECT BookID From Book WHERE Author = 'AuthorX');
屈服
+--------+
| BookID |
+--------+
| 3 |
| 1010 |
| 1005 |
| 1003 |
+--------+
EDIT2:和BookID不适用于除works之外的
还是很想知道为什么除了不
编辑3:来自DoWork的示例
EDIT4:mariab移除支架
三条线看起来更好
SELECT `BookID` From `Stats` WHERE `BookID` >= 1000
EXCEPT
SELECT `BookID` From `Book` WHERE `Author` = 'AuthorX'
这和你在工会里看到的差不多
编辑:
或者在旧版本的MariaDB上尝试另一个表达式
或者
或者
然后你在另一条线上的某个地方还有其他问题。。。试着跑步;在它自己的情况下,然后使用;最后,这是唯一的一行…你试过了吗?以防万一,有什么东西是偶然出现的……两者都有吗?同样的结果在except之前运行上半场时,你会得到什么?在@MatBaillie发布的链接中,它说except是在10.3.0中引入的。你用的是什么版本?@kai-dj我很惊讶你竟然没有被执行。它应该是和BookID不在@kai dj中-把和BookID放在它应该在的地方,看看这是否解决了它,目前我甚至不知道这意味着什么,不管它为什么执行。祝你好运,我今天不在家了…除了在MariaDB 10.3.0中介绍的。。这个答案是不是仍然想知道为什么除了没有分开?@MatBailie oh ye-对不起,我的头开始痛了^^
SELECT BookID From Book WHERE Title LIKE 'Harry Potter%'
UNION ALL
SELECT BookID From Book WHERE Author LIKE '%Toklien%'
SELECT BookID
FROM Book
WHERE BookID >= 1000
AND BookID NOT IN (SELECT BookID
FROM Book
WHERE Author = 'AuthorX'
)
SELECT BookID
FROM Book
WHERE BookID >= 1000
AND NOT EXISTS (SELECT *
FROM Book lookup
WHERE lookup.Author = 'AuthorX'
AND lookup.BookID = Book.BookID
)
SELECT
*
FROM
(
SELECT BookID FROM Book WHERE BookID >= 1000
)
high_id
LEFT JOIN
(
SELECT BookID FROM Book WHERE Author = 'AuthorX'
)
target_author
ON target_author.BookID = high_id.BookID
WHERE
target_author.BookID IS NULL