[英]How to fix Sql query
我一直在嘗試獲取一個查詢以返回用戶擁有的朋友,在我的成員表中,我有成員的用戶ID,名字和姓氏,我在朋友表中有用戶ID列和朋友ID列,現在我我將我的會員表與朋友表相結合,這樣我就能得到朋友的名字。
用戶表
user_id名字姓氏
2 John drake
3 Hamer Joy
4 Finter Richy
朋友表
friends_id user_id friend_id
1 2 3
2 4 2
3 4 3
這是我執行的查詢
SELECT a.friends_id,a.user_id,
a.friend_id, b.firstname, b.lastname
FROM friends AS a,users As b
WHERE (a.friend_id = b.user_id OR a.user_id = b.user_id) AND
(a.friend_id = 2 OR a.user_id =2)
這是我得到的結果
friends_id user_id friend_id firstname lastname
1 2 3 John drake
1 2 3 Hamer Joy
3 4 2 John drake
3 4 2 Finter Richy
這是我期待的結果
friends_id user_id friend_id firstname lastname
1 2 3 Hamer Joy
3 4 2 Finter Richy
也許是指定個人朋友的union
以及將他作為朋友的用戶:
select a.friends_id, a.user_id, a.friend_id, b.firstname, b.lastname
from friends a, users b
where a.user_id = 2 and b.user_id = a.friend_id
union
select a.friends_id, a.user_id, a.friend_id, b.firstname, b.lastname
from friends a, users b
where a.friend_id = 2 and b.user_id = a.user_id
這是由2個內部查詢的union
產生的所有單個查詢。
我認為您的原始查詢的問題是您在聯接中使用OR條件。 通常情況下,OR在連接條件下沒有幫助。
這是另一個更短的解決方案,並使用ANSI連接語法,因此您可以清楚地看到投影。 免責聲明,我沒有在數據庫中測試過,因此可能存在錯誤。 但是,如果您願意,也可以訪問原始用戶名(我已將其添加為最后兩列)。
select F.friends_id, U.user_id, FR.user_id,
FR.firstname, FR.lastname,
U.firstname, U.lastname
FROM users U join Friends F on
U.user_id = F.user_id
JOIN Users FR on
F.friend_id = FR.user_id
where U.user_id = 2 or FR.user_id = 2
;
作為一般規則,使用ANSI連接語法可以使查詢更容易閱讀,並有助於確保指定所有連接條件。 它還使您可以輕松訪問更多聯接類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.