2012-11-22 35 views
1

我有這樣的表格:MySQL - 選擇相互的行

user_id | wants_user_id |狀態

而且我想選擇相互交叉的行,並且具有值爲「是」或「可能」的state列。

實施例的數據:

行1:1 | 2 | "yes"
第2列:2 | 1 | "maybe"
第3列:3 | 2 | "yes"

在這種情況下,我想選擇行1和2以及對wants_user_id(第二列)我想加入表users的用戶數據,但是我找不到sql命令。

謝謝你的幫助。

回答

0

使用自聯接得到匹配的行(我假設「互行」在這裏的意思是想讓對方用戶):

SELECT * 
FROM myTable a 
INNER JOIN myTable b ON a.user_id = b.wants_user_id 
    AND b.user_id = a.wants_user_id 
INNER JOIN users ua ON a.user_id = ua.id 
INNER JOIN users ub ON b.user_id = ub.id 
WHERE a.state IN ('yes', 'maybe') 
AND b.state IN ('yes', 'maybe') 

在這種情況下,你會得到兩個「複製」行,一個用於1 <→2和一個用於2 <→1。爲了消除這種情況,您可以將AND b.user_id > a.user_id添加到連接條件 - 這將只選擇每對中的一行。

+0

是的,這正是我一直在尋找的,謝謝! – kudlajz