我有一个包含6列的表格:
id
name
type_id
code
lat
long
前三个是必需的。 ID
是私钥,会自动插入序列。
我有一些重复的行,正如name
和type_id
相同所定义,但我想查看欺骗的所有数据。我可以简单地找到这些傻瓜:
SELECT name
, type_id
FROM table1
GROUP BY name
, type_id
HAVING COUNT(*) > 1
但实际上查看所有信息让我感到困惑。我知道这应该很简单,但我在这里碰壁。
答案 0 :(得分:1)
SELECT *
FROM table1 t1
WHERE (t1.name,t1.type_id) in ( SELECT DISTINCT name
, type_id
FROM table1
GROUP BY name, type_id
HAVING COUNT(*) > 1 )
会这样做。
HTH
答案 1 :(得分:1)
您可以在表格上进行自我联接以查找所有重复对:
SELECT
a.name name
, a.type_id type_id_a
, a.code code_a
, a.lat lat_a
, a.long long_a
, b.code code_b
, b.lat lat_b
, b.long long_b
FROM table1 a
JOIN table1 b
ON a.name = b.name
AND a.type_id = b.type_id
AND a.ROWID > b.ROWID
为了确保行与自身不匹配,并且每对只输出一次,我添加了a.ROWID > b.ROWID
,这适用于Oracle。如果使用其他数据库,则需要采用不同的方法将它们分开。
答案 2 :(得分:0)
如果其中一个比较字段的值为NULL,那么仍然找不到双打。 为了得到这些,我使用nvl来比较比较字段中的NULL,并且我知道该值不会出现在该表/字段中。
答案 3 :(得分:-2)
只需将NULLS设为0 ......
...使用NVL功能。