2014-11-22 105 views
0

我需要一個基於條件將用戶配對的查詢。該查詢將返回動態數量的行,等於符合條件的對的數量。查詢返回兩個字段,即id1id2,每個字段都是用戶的ID。我將如何創建查詢,以便在另一行中不再顯示ID?的希望返回的我相互排斥對

舉例:我希望返回

id1 id2 
001 003 
004 006 
009 011 
023 042 

例子:

id1 id2 
001 003 
003 004 
012 002 
023 012 

回答

1

如果我理解正確的話,你有一些表格,說Users,並且您想要配對用戶。您可能還有where子句或其他條件。

你實際上可以做到這一點。枚舉行,然後做基於相鄰的偶數和奇數值組合條件彙總:

select min(u.userid) as userid1, max(u.userid) as userid2 
from (select u.*, (@rn := @rn + 1) as seqnum 
     from users u cross join 
      (select @rn := 0) vars 
    ) u 
group by floor((seqnum - 1)/2) 
having userid1 <> userid2; 

您可以輕鬆地在子查詢中添加where條款。

+0

使用該查詢,它只是在兩個字段中輸出每個用戶的ID。我假設你的意思是「逐層((seqnum-1)/ 2)',它確實結合了偶數/奇數,但在我的情況下,最後一個用戶返回兩次作爲它自己的一對。 id1:199 id2:也199.我已經通過追加'有id2> id1'解決了這個問題,它似乎在工作。我需要現在用標準測試它。 – user1210725 2014-11-23 00:08:32