MySQL 8.0 的新版本现在支持Common Table Expressions。
根据手册:
在 SELECT、UPDATE 和 DELETE 语句的开头允许使用 WITH 子句:
WITH ... SELECT ...
WITH ... UPDATE ...
WITH ... DELETE ...
所以,我想,给定下表:
ID lastName firstName
----------------------
1 Smith Pat
2 Smith Pat
3 Smith Bob
我可以使用以下查询:
;WITH ToDelete AS
(
SELECT ID,
ROW_NUMBER() OVER (PARTITION BY lastName, firstName ORDER BY ID) AS rn
FROM mytable
)
DELETE FROM ToDelete
为了从表中删除重复项,就像我在SQL Server中所做的那样。
事实证明我错了。当我尝试DELETE
从 MySQL Workbench 执行语句时,出现错误:
错误代码:1146。表 'todelete' 不存在
当我尝试UPDATE
使用 CTE 时,我也会收到一条错误消息。
所以,我的问题是,如何在 MySQL 中的or语句WITH
的上下文中使用子句(如 8.0 版手册中所述)?UPDATE
DELETE