MySql错误-删除具有优先级的重复行 预告
我的表名为MySql错误-删除具有优先级的重复行 预告,mysql,sql,sql-delete,Mysql,Sql,Sql Delete,我的表名为Test: -- Table Creation CREATE TABLE Test( id integer, title varchar (100) ); 测试表 | Id | title | |----|--------| | 1 | Hi | | 2 | Hello | | 2 | Hellew | | 3 | World | | 3 | Wordy | 过程 我想删除重复id 基于优先级 问题 这是我得到的输出错误 ERROR 109
Test
:
-- Table Creation
CREATE TABLE Test(
id integer,
title varchar (100)
);
测试表
| Id | title |
|----|--------|
| 1 | Hi |
| 2 | Hello |
| 2 | Hellew |
| 3 | World |
| 3 | Wordy |
过程
我想删除重复id
基于优先级
问题
这是我得到的输出错误
ERROR 1093 (HY000) at line 5: You can't specify target table 'Test' for update in FROM clause
所需输出
谢谢,您在这里没有明确提到什么是“优先权”。但是看一下输出示例,我假设优先级是保留那些比其他具有类似id的字符串大的字符串。下面是我的代码:
delete a.* from Test a join Test b
on a.id = b.id where a.title < b.title;
select * from Test;
从测试a中删除a.*加入测试b
a.id=b.id,其中a.title
参考文献
您没有明确提到此处的“优先级是什么。但是看一下输出示例,我假设优先级是保留那些比其他具有类似id的字符串大的字符串。下面是我的代码:
delete a.* from Test a join Test b
on a.id = b.id where a.title < b.title;
select * from Test;
从测试a中删除a.*加入测试b
a.id=b.id,其中a.title
参考文献
是什么代码导致错误?如果没有主键,那么就没有真正的表。@那么,您认为如果我编辑我的表使主键不为NULL
这会解决我没有重复值的问题,并且Delete
语句会起作用吗?没有明显的“优先级”,错误似乎来自UPDATE语句,而不是DELETE语句。请发布您拥有的代码。可能我有点老派,但我认为主键是询问有关关系数据库中的查询问题的先决条件。导致错误的代码是什么?如果您没有主键,那么您就没有真正的表。@因此,你认为如果我编辑我的表使主键不为空
这会解决我没有重复值的问题,并且Delete
语句会起作用吗?没有明显的“优先级”,错误似乎来自UPDATE语句,而不是Delete语句,请发布您拥有的代码,可能我有点老派,但我认为主键是询问有关关系数据库中查询的问题的先决条件a
或b
是什么意思?这是我给相关表的别名。因为我们在这里是自连接表,所以需要给出不同的名称。非常基本的数据库概念。如果我的回答解决了您的问题,请将其标记为正确答案。谢谢,它起作用了。你能解释一下什么是a
和b
更多。。。所以,我可以回到这个问题上来作为参考。请在回答中包含您的解释。您可以在此处阅读有关别名的内容:。在标题下阅读:ALIAS a table我所说的优先级是表中第一次出现的。MySql将它作为一个引用,因此,如果它在它之后找到另一个值,它会使用您的查询将其删除。例如,当查询在表中找到2个键时,它将第一次出现,然后删除后面具有相同id
的任何项。您对a
或b
的定义是什么?这是我给相关表的别名。因为我们在这里是自连接表,所以需要给出不同的名称。非常基本的数据库概念。如果我的回答解决了您的问题,请将其标记为正确答案。谢谢,它起作用了。你能解释一下什么是a
和b
更多。。。所以,我可以回到这个问题上来作为参考。请在回答中包含您的解释。您可以在此处阅读有关别名的内容:。在标题下阅读:ALIAS a table我所说的优先级是表中第一次出现的。MySql将它作为一个引用,因此,如果它在它之后找到另一个值,它会使用您的查询将其删除。例如,当查询在表中找到2个键时,它将第一次出现,然后删除后面具有相同id
的任何内容。
delete a.* from Test a join Test b
on a.id = b.id where a.title < b.title;
select * from Test;