从名称出现两次的表中进行选择

时间:2017-10-02 22:00:20

标签: sql oracle

我想从一个名称出现两次的表中进行选择。

例如,我有一个这样的表,

ID          Name
----       ------
1          Jane John
2          Kevin Smith
3          Jane John

我想要的是输出显示Jane John出现两次的位置,所以看起来应该是这样的:

ID          Name
----       ------
1          Jane John
3          Jane John

我尝试了一下stackoverflow,但无法找到一个准确而简单的答案。

我正在使用oracle SQL Developer。

1 个答案:

答案 0 :(得分:3)

你要求出现两次的记录。如果一行显示三次,则除非您将having子句修改为已注释,否则它将不会显示。

SELECT id
    ,NAME
FROM tablen
WHERE NAME IN (
        SELECT NAME
        FROM TableN n
        GROUP BY (NAME)
        HAVING counT(NAME) = 2 --Use >1 instead of =2 for more than one record
        )

修改

我会针对您的上一条评论添加新的解决方案。 因为您只能在IN()中请求一个字段,所以我将使用特殊字符或字符串,确保它不属于任何字段中的有效值。 看看这个:http://sqlfiddle.com/#!6/2af55/3

SELECT id
    ,NAME
    ,name2
FROM tablen
WHERE concat(NAME,'=',name2) IN (
        SELECT concat(NAME,'=',name2)
        FROM TableN n
        GROUP BY concat(NAME,'=',name2)
        HAVING count(concat(NAME,'=',name2)) = 2
        )

注意我在SQL Server中写了这个想法,不确定concat函数在Oracle中是否也能正常工作或者寻找替代方案。