我们有一个包含以下各栏的照片表:
id, merchant_id, url
此表包含merchant_id, url
组合的重复值。因此,一行可能会出现多次。
234 some_merchant http://www.some-image-url.com/abscde1213
235 some_merchant http://www.some-image-url.com/abscde1213
236 some_merchant http://www.some-image-url.com/abscde1213
删除这些重复的最好方法是什么?(我用的是PostgreSQL 9.2和Rails 3。)
我看到你有几个选择。
要快速实现这一点,请使用以下内容(假设您的ID列不是唯一的,因为您在上面多次提到234):
CREATE TABLE tmpPhotos AS SELECT DISTINCT * FROM Photos;
DROP TABLE Photos;
ALTER TABLE tmpPhotos RENAME TO Photos;
这是SQL小提琴。
如果有约束,则需要将约束添加回表中。
如果您的id列是唯一的,您可以做一些事情来保持您的最低ID:
DELETE FROM P1
USING Photos P1, Photos P2
WHERE P1.id > P2.id
AND P1.merchant_id = P2.merchant_id
AND P1.url = P2.url;
还有小提琴。
sgeddes答案的第二部分不适用于Postgres(小提琴使用MySQL)。以下是他使用Postgres回答的更新版本:http://sqlfiddle.com/#!12/6b1a7/1
DELETE FROM Photos AS P1
USING Photos AS P2
WHERE P1.id > P2.id
AND P1.merchant_id = P2.merchant_id
AND P1.url = P2.url;
这是我的看法。
select * from (
SELECT id,
ROW_NUMBER() OVER(PARTITION BY merchant_Id, url ORDER BY id asc) AS Row
FROM Photos
) dups
where
dups.Row > 1
随意玩订单,以根据您的规格定制要删除的记录。
SQL小提琴=
不再支持Postgres 9.2的SQL Fiddle;将SQL Fiddle更新到postgres 9.3
我有一个带有ID,姓名和地址字段的员工类。如果两个雇员的 ID 和姓名完全相同,则认为他们是一样的。现在我有一个员工列表,现在我的任务是收集重复的员工。 这是我的员工类代码,带有基于id和name字段重写的hascode和equals方法。 现在我有这个代码可以找到重复的员工 这段代码运行良好,并在我的集合中给出了id为1的雇员。 如何使用Java 8 lamda和streams执行相同的操作?在
我有一个名为“user_links”的PostgreSQL数据库表,该表当前允许以下重复字段: 唯一约束当前是第一个名为“id”的字段,但是我现在希望添加一个约束,以确保、、和都是唯一的,但我无法应用约束,因为已经存在违反此约束的重复值。 有没有找到所有重复的方法?
1.3. 查找重复的行 对文件做拷贝、打印、搜索、排序、统计或类似事情的程序都有一个差不多的程序结构:一个处理输入的循环,在每个元素上执行计算处理,在处理的同时或最后产生输出。我们会展示一个名为dup的程序的三个版本;灵感来自于Unix的uniq命令,其寻找相邻的重复行。该程序使用的结构和包是个参考范例,可以方便地修改。 dup的第一个版本打印标准输入中多次出现的行,以重复次数开头。该程序将引入i
我希望在QueryDSL JPA中执行此SQL请求 为了在表中找到重复的行,我应该执行这个请求。但使用QueryDSL,我无法找到编写此代码的方法。 有什么建议吗? 多谢问候,
问题内容: 当LastDate中存在差异时,以下SQL可用于识别唯一的电话。但是,如果重复的电话具有完全相同的LastDate,则它将不起作用。 任何想法将不胜感激。 问题答案: 更改为。
问题内容: 范例: 在此表中,我需要获得Empid 1作为输出。因为它的bookid 8不止一次。 提前致谢.. 问题答案: 您可以使用: 但这会给您重复的内容。例如,如果您有1-8,1-8,1-9,1-9,则会得到1,1的输出,因为Empid 1具有两个不同bookid值的重复bookid。您将需要使用来过滤出重复的Empid。