[英]SQL find records based on two columns
給定一個主表為id
的用戶表,我有一個名為friends
userid1, userid2
該表只有兩個字段( userid1, userid2
)。 這使我們可以在不同用戶之間創建任何類型的關系(一對多,一對一等)。 用戶可以出現在任一列中,並且兩列相等。 IOW,每個關系一個條目。
如何提取給定用戶id
所有朋友。 說喬尼(Jonny),有3個朋友,他的用戶id
是16
...我的SQL查詢應該像這樣嗎?
SELECT *
FROM db.users
JOIN db.friends
ON db.users.id = db.friends.userid1
AND db.users.id = 16
希望這很清楚。 另外,如果可能,我可以從結果集中排除Jonny嗎?
列出的該查詢使我了解以下內容:
id name uuid birthday userid1 userid2
16 jonny ABCDEFGHIJKLMNOP 1967-04-27 01:00:00 1 2
16 jonny ABCDEFGHIJKLMNOP 1967-04-27 01:00:00 1 3
這很接近,除了我要他的朋友,而不是喬尼
謝謝大家,所以我感謝您。 這是最終的工作查詢。
SELECT *
FROM db.users
WHERE db.users.id IN
(
SELECT db.friends.userid2 as id FROM db.friends WHERE db.friends.userid1 = 16
union
SELECT db.friends.userid1 as id FROM db.friends WHERE db.friends.userid2 = 16
)
這給了我:
id name uuid birthday
2 robin ABCDEFGHIJKLMNOP 1967-04-27 01:00:00
3 gary ABCDEFGHIJKLMNOP 1967-04-27 01:00:00
最后將user.id
的條件添加到where
子句中:
Select * From users
INNER JOIN friends on
users.id = friends.userid1
Where users.id = 16
另外,我將使用Inner Join
,僅當friends
中有匹配項時,才會從users
返回所有記錄
您可以執行以下子查詢:
SELECT *
FROM users
WHERE id IN
(
SELECT userid2 as id FROM db.friends WHERE userid1 = 16
)
您應該過濾好友表,而不是用戶表。
SELECT friends.*
FROM friends
INNER JOIN users
ON friends.userid2 = users.id
WHERE friends.userid1 = 16
如果您只需要朋友ID,那么根本沒有理由加入
SELECT userid2
FROM friends
WHERE userid1 = 16
您需要一個朋友ID列表:
SELECT U FROM DB.USERS U WHERE U.ID IN ( SELECT F.USERID2 FROM DB.FRIENDS F WHERE F.USERID1 = 16)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.