在MYSQL查询中使用TOP删除Dupliacte抛出错误代码

时间:2018-09-20 07:25:06

标签: mysql jdbc

我只是使用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;

任何人都可以帮助我,为什么我会遇到语法错误?

1 个答案:

答案 0 :(得分:0)

您不能在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来确定要在运行时中删除多少行。

模式(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         |

View on DB Fiddle

相关问题