我只是使用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;
任何人都可以帮助我,为什么我会遇到语法错误?
答案 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 |