【发布时间】:2011-03-31 01:27:49
【问题描述】:
我在 Oracle 数据库表中有行,这对于两个字段的组合应该是唯一的,但表上没有设置唯一约束,因此我需要使用 SQL 自己查找所有违反约束的行。不幸的是,我微薄的 SQL 技能无法胜任这项任务。
我的表有三列相关:entity_id、station_id 和 obs_year。对于每一行,station_id 和 obs_year 的组合应该是唯一的,我想通过使用 SQL 查询将它们刷新出来来确定是否存在违反此规则的行。
我尝试了以下 SQL(由 this previous question 建议),但它对我不起作用(我得到 ORA-00918 列的定义不明确):
SELECT
entity_id, station_id, obs_year
FROM
mytable t1
INNER JOIN (
SELECT entity_id, station_id, obs_year FROM mytable
GROUP BY entity_id, station_id, obs_year HAVING COUNT(*) > 1) dupes
ON
t1.station_id = dupes.station_id AND
t1.obs_year = dupes.obs_year
有人可以建议我做错了什么,和/或如何解决这个问题?
【问题讨论】:
标签: sql oracle unique unique-constraint ora-00918