mysql - 在 MYSQL 查询中使用 TOP 删除重复项会引发错误代码
问题描述
我只是使用 TOP 语法从表中删除重复值。但它返回错误代码。
询问:
DELETE top(SELECT COUNT(*)-1 FROM tests WHERE test_name='WALLET_01' AND product_id=25)FROM tests WHERE test_name='WALLET_01' And product_id=25;
错误代码:
错误代码:1064 您的 SQL 语法有错误;
在查询下单独执行,返回 int 值为 1:
SELECT COUNT(*)-1 FROM tests WHERE test_name='WALLET_01' AND product_id=25;
任何人都可以帮助我为什么我收到语法错误?
解决方案
您不能在Top中使用子查询
Top
句法
[
TOP (expression) [PERCENT]
[ WITH TIES ]
]
表达
Is the numeric expression that specifies the number of rows to be returned. expression is implicitly converted to a float value if PERCENT is specified; otherwise, it is converted to bigint.
我们可以看到它只支持子TOP
查询expression
编辑
我看到你改变了你使用的dbms。
Mysql 不支持TOP
,但您可以使用LIMIT
获取限制行。
如果PK
您的表中没有,您可以尝试使用dynamic SQL
get 来决定要在运行时删除多少行。
架构(MySQL v5.6)
CREATE TABLE tests(
test_name VARCHAR(50),
product_id int
);
INSERT INTO tests VALUES('WALLET_01',25);
INSERT INTO tests VALUES('WALLET_01',25);
SET @sql = NULL;
SET @Rn = NULL;
SELECT
(COUNT(*)-1)
INTO @Rn
FROM tests
WHERE test_name='WALLET_01' AND product_id=25;
SET @sql = CONCAT('DELETE FROM tests WHERE test_name=''WALLET_01'' AND product_id=25 limit ',@Rn);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
查询 #1
SELECT * FROM tests;
| test_name | product_id |
| --------- | ---------- |
| WALLET_01 | 25 |
推荐阅读
- spring-boot - 如何测量 Spring Boot Cacheable 的缓存内存?
- c++ - 为什么我的 c++ 代码在使用堆栈时以退出代码 11 结束?
- android - 工具:showIn="navigation_view" 不适用于制作菜单
- typescript - Typescript - 将 UnionType 的一个元素传递给函数,但不能同时传递两者
- python - 连接到 Postgres 数据库时出现 Apache Web 服务器分段错误错误
- sql - SSAS 表格模型 - 使用 DAX 查找值创建角色以查找多个列
- kubernetes - Kubernetes (EKS) 和 Airflow 中的有限 pod
- python - 如何从密集的熊猫数据框中制作完整的矩阵
- typescript - 为什么要进行类型检查?
- ruby-on-rails - 如果我从不同的工作人员创建类的实例,是否会应用变量缓存?