我想从一个名称出现两次的表中进行选择。
例如,我有一个这样的表,
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。
答案 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中是否也能正常工作或者寻找替代方案。