获取多行相等的人员(Oracle SQL)
我的sql模式如下所示:获取多行相等的人员(Oracle SQL),sql,database,oracle,Sql,Database,Oracle,我的sql模式如下所示: ID | Like ______|_______ p1 | 2 p1 | 3 p1 | 4 p2 | 3 p2 | 2 p3 | 2 p3 | 3 p3 | 4 p4 | 3 p4 | 2 所以我必须选择两对喜欢同样东西的人。在本例中:[p1,p3]和[p2,p4]。所有的“like”应该是相同的,所以[p1,p2]是错误的! 我该怎么做 谢谢你的回答 您没有指
ID | Like
______|_______
p1 | 2
p1 | 3
p1 | 4
p2 | 3
p2 | 2
p3 | 2
p3 | 3
p3 | 4
p4 | 3
p4 | 2
所以我必须选择两对喜欢同样东西的人。在本例中:[p1,p3]和[p2,p4]。所有的“like”应该是相同的,所以[p1,p2]是错误的!
我该怎么做
谢谢你的回答 您没有指定正在使用的Oracle版本号。在11g中,您可以使用LISTAGG分析函数进行此操作。如果您使用的是Oracle 10,则可以使用未记录的WM_CONCAT函数。请注意,在某些版本中,它返回VARCHAR,而在其他版本中返回CLOB:
SELECT like, WM_CONCAT(id)
FROM mytable
GROUP BY like
以下是有关如何做到这一点的更多信息:
希望这有帮助。这是一个关系除法操作。您可以通过组合NOT EXISTS子句来执行此操作,例如:
SELECT a.ID AS ID1
,b.ID AS ID2
FROM (SELECT DISTINCT ID FROM mytable) a
,(SELECT DISTINCT ID FROM mytable) b
WHERE a.ID < b.ID
AND NOT EXISTS
( SELECT a2.Like
FROM mytable a2
WHERE a.ID = a2.ID
MINUS
SELECT b2.Like
FROM mytable b2
WHERE b.ID = b2.ID
)
AND NOT EXISTS
( SELECT b2.Like
FROM mytable b2
WHERE b.ID = b2.ID
MINUS
SELECT a2.Like
FROM mytable a2
WHERE a.ID = a2.ID
);
ID1 ID2
=== ===
p1 p3
p2 p4
你能详细说明一下你想要什么作为输出吗,到目前为止我知道你想要上面查询p1,p3和p2,p4中的两对,因为所有的喜欢都是匹配的…对吗?正如标题所建议的,当多行相等时找人,我想他要求p1,p3和p2,p4作为输出,你的查询将返回2 p1,p2,p4,p3 3 p1,p3,p4,p2 4 p1,P3请注意:我不确定这是否是最有效的解决方案。我把它改了,以减少所需的工作量。