当前位置: 首页 > 面试题库 >

在MySQL中相当于Oracle的RowID

公冶兴文
2023-03-14
问题内容

mysql中是否有相当于Oracle的rowid?

delete from my_table where rowid not in (select max(rowid) from my_table group by field1,field2)

我想做一个MySQL等效于此查询!!!

我想做的是::my_table没有主键..我正试图删除重复的值并强加一个主键(field1和field2的复合)。


问题答案:

在MySql中,通常使用会话变量来实现功能:

SELECT @rowid:=@rowid+1 as rowid
FROM table1, (SELECT @rowid:=0) as init
ORDER BY sorter_field

但是您无法在要从子查询中删除的表上进行排序。

UPD :也就是说,您将需要创建一个临时表,将测距子查询插入到该临时表中,并通过与临时表联接来从原始表中删除(您将需要一些唯一的行标识符):

CREATE TEMPORARY TABLE duplicates ...

INSERT INTO duplicates (rowid, field1, field2, some_row_uid)
SELECT
  @rowid:=IF(@f1=field1 AND @f2=field2, @rowid+1, 0) as rowid,
  @f1:=field1 as field1,
  @f2:=field2 as field2,
  some_row_uid
FROM testruns t, (SELECT @rowid:=NULL, @f1:=NULL, @f2:=NULL) as init
ORDER BY field1, field2 DESC;

DELETE FROM my_table USING my_table JOIN duplicates
  ON my_table.some_row_uid = duplicates.some_row_uid AND duplicates.rowid > 0

由于这是一次操作,因此不会带来太多开销。



 类似资料:
  • 问题内容: 我需要能够生成运行查询,该查询将返回下表中的ID的下一个值: 在Oracle中,你可以在序列上调用NEXTVAL,它为你提供下一个序列(注意:不必在表上进行插入)。 谷歌搜索之后,我发现你可以使用以下查询找到auto_increment的当前值: 问题是我希望每次查询该值时该值都增加。在Oracle中,当你调用nextval时,即使不将行插入表中,序列的值也会增加。 有什么方法可以修改

  • 问题内容: 我有一行用于SQL Server的代码,它采用的日期列为“ YYYYMMDD”,其中DD为00,并将00转换为01,以便它与datetime一起使用。我希望能够使用MySQL 当前适用于SQL Server的代码: 但是isdate在MySQL中无效,该怎么解决? 问题答案: 您可以尝试使用STR_TO_DATE函数。如果表达式不是日期,时间或日期时间,则返回。

  • 问题内容: 在Access(或Jet,就此而言)中,Oracle的decode()是否具有等效项。 我面临的问题是:我应该基本上根据状态和日期(所有记录的状态均为2)对结果集进行排序(排序)。 在甲骨文中,我会像 问题答案: 最接近的类比是函数,例如 甲骨文: 访问数据库引擎 请注意,使用该函数,您每次都必须提供完整的谓词,因此,您不仅可以仅使用Supplier_id。对于默认值,请使用对人类读者

  • 问题内容: Oracle有2个函数- rank()和density_rank()-我发现它们对某些应用程序非常有用。我现在在mysql中做某事,想知道他们是否有与之等效的东西? 问题答案: 没有直接等效的方法,但是您可以使用一些(效率不高)自联接来伪造它。来自MySQL查询howtos集合的一些示例代码:

  • 问题内容: 首先,我是熊猫的新手,但我已经爱上了它。我正在尝试实现与Oracle的滞后功能等效的功能。 假设您有以下DataFrame: 如果这是一个oracle数据库,而我想创建一个按“ Group”列分组并按Date排序的滞后函数,则可以轻松使用此函数: 这将产生下表: 在大熊猫中,我可以将日期设置为索引并使用shift方法: 唯一的问题是,这不会按列分组。即使将日期和组这两列设置为索引,我仍

  • 问题内容: 我正在尝试将查询从MySQL移植到SQL SERVER2012。 如何为MySQL的substring_index()编写等效项? MySQL SUBSTRING_INDEX()从给定字符串中返回指定次数的分隔符之前的子字符串。 SUBSTRING_INDEX(str,delim,count) 输出: 问题答案: 尝试基于T-SQL和XQuery()的以下解决方案: T-SQL标量函数