簡體   English   中英

SQL根據兩列查找記錄

[英]SQL find records based on two columns

給定一個主表為id的用戶表,我有一個名為friends userid1, userid2該表只有兩個字段( userid1, userid2 )。 這使我們可以在不同用戶之間創建任何類型的關系(一對多,一對一等)。 用戶可以出現在任一列中,並且兩列相等。 IOW,每個關系一個條目。

如何提取給定用戶id所有朋友。 說喬尼(Jonny),有3個朋友,他的用戶id16 ...我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM