0

我有一个看起来像这样的表:

id      name    dob
007     name1   19680514
007     name2   20110830
16842   name3   19660927
250718  name3   19660927
253692  name4   19350328
25576   name5   19520813
25576   name5   19520813

我需要: - 一个 SELECT 语句,它给我每一行,其中 id 与另一行相同,但对应的名称或 dob 不同。示例输出:

id  name    dob
007 name1   19680514
007 name2   20110830
  • 第二条语句给出了名称和 (!) dob 与另一行相同但 id 不同的每一行。示例输出:

    id     name   dob
    16842  name3  19660927
    250718 name3  19660927
    

背景:允许完全相同的行,但是: - 对于 name&dob 的组合,每个 id 都应该是唯一的 - name&dob 的每个组合都应该只分配一个 id。

所以我想找出有错误的条目以便能够手动更正它们。

谢谢!

4

2 回答 2

0

第一个查询:

SELECT * FROM your_table yt
INNER JOIN (
SELECT
id
FROM
your_table
GROUP BY id 
HAVING COUNT(*) > 1
) sq ON yt.id = sq.id

第二个查询:

SELECT * FROM your_table yt
INNER JOIN (
SELECT
name, dob
FROM
your_table
GROUP BY name, dob 
HAVING COUNT(*) > 1
) sq ON yt.name = sq.name AND yt.dob = sq.dob
于 2013-11-12T12:42:06.337 回答
0

SELECT 语句给出 id 与另一行相同但对应的名称或 dob 不同的每一行。示例输出:

select * from tbl t1
join tbl2 t2 
on t1.id = t2.id
where (t1.name <> t2.name) or (t1.dob <> t2.dob)

给出名称和 (!) dob 与另一行相同但 id 不同的每一行的语句。示例输出:

select * from tbl t1
join tbl2 t2 
on t1.name = t2.name AND t1.dob = t2.dob
where (t1.id <> t2.id) 
于 2013-11-12T12:43:14.550 回答