2009-12-18 48 views
0

我有這樣的結構的表格:重寫與LEFT MySQL的子查詢的JOIN

  • UID
  • SID

所有整數。該表模擬兩個用戶之間的友誼。

我想要做的就是找到只存在於一個方向的記錄。

例如: 我想查找具有t1.u_id = 15的記錄數,當沒有記錄具有t2.s_id = 15和t2.u_id = t1.s_id時。

因此,兩個ID之間的關係只存在一次。

在我看來,我設法使用子查詢編寫正確的查詢,但後來我開始重寫查詢使用左連接來提高速度,現在...以及它不工作。

我的查詢現在的問題是:

SELECT * FROM `friends` AS f1 LEFT JOIN `friends` AS f2 
ON f1.user_id = f2.friend_id 
WHERE f1.friend_id=15 AND f2.user_id IS NULL 

,但它不工作。請幫忙。

注意:我正在使用mysql 5,所以我不能使用EXCEPT語句和所有其他好東西。

+0

解釋*如何*它不工作?記錄它發現它不應該或反之亦然? – ysth 2009-12-18 09:45:38

回答

1

這個怎麼樣?

SELECT * 
FROM `friends` AS f1 
    LEFT JOIN `friends` AS f2 ON f1.user_id = f2.friend_id AND f1.friend_id = f2.user_id 
WHERE f1.friend_id=15 
    AND f2.user_id IS NULL 
0

而這一個?

SELECT * FROM friends F1 LEFT JOIN friends F2 ON f1.user_id = f2.friend_id WHERE f1.friend_id = 15,f2.user_id IS NULL

+0

猜你發現了蜱的作用:) – munch 2009-12-18 09:10:09