【发布时间】:2015-02-26 20:44:48
【问题描述】:
与this question 非常相似,只是干净利落。
目标:
我需要使用带有 ALIAS 和 LIMIT 的 DELETE 语句。可以选择使用 USING、WHERE 或其他任何其他解决方法,只要它有效。
案例 4、6、7、8 可能是这个问题的解决方案,但它们每个都返回一个错误。
示例 1、2、3 和 5 仅用于本示例(如果您愿意,可以填充矩阵)。
架构:
CREATE TABLE test (id int(10));
INSERT INTO test VALUES (1), (2), (3);
1) 没有别名,没有限制 - 工作
DELETE FROM test;
2) 没有别名,限制 - WORKS
DELETE FROM test LIMIT 1;
3) 别名,无限制 - ERROR
DELETE FROM test t;
错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“t”附近使用正确的语法
4) 别名,限制(将是 SOLUTION)- 错误
DELETE FROM test t LIMIT 1;
错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“t LIMIT 1”附近使用正确的语法
5) 别名+使用,没有限制 - WORKS
DELETE FROM t USING test t;
6) 别名+USING,限制(将是解决方案)- 错误
DELETE FROM t USING test t LIMIT 1;
错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“LIMIT 1”附近使用正确的语法
7) 别名、限制、哪里(应该是 SOLUTION)- 错误
DELETE FROM test t WHERE 1=1 LIMIT 1;
错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“t WHERE 1=1 LIMIT 1”附近使用正确的语法
8) alias+USING, limit, where (would be SOLUTION) - ERROR
DELETE FROM t USING test t WHERE 1=1 LIMIT 1;
错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“LIMIT 1”附近使用正确的语法
【问题讨论】:
-
尝试:DELETE FROM t USING test t where 2=2 LIMIT 1;
-
DELETE t FROM test t... -
@EJP 不,不是。 OP的问题在于
USING关键字 -
@i486 您的建议已在问题中提及。它可以通过使用 EngineerCoder 建议的技巧来工作。
DELETE t FROM test t where 1=1 limit 1;
标签: mysql