[英]How to write mysql query to achieve the following type of join (Join based on value of a column )
表用戶:
id----email
1-----s@s.com
2-----p@p.com
表user_buddies
id-----user_id----buddy_id----status enum('accepted','pending')
1------1----------2-----------pending
假設我正在查詢用戶2然后我想獲得用戶2的電子郵件。 如果我正在查詢用戶1,那么我想獲得用戶1的電子郵件。
以下查詢始終返回空行。
SELECT
users.email,
ub1.*, ub2.*
FROM
users
JOIN user_buddies ub1 ON users.id = ub1.user_id
JOIN user_buddies ub2 ON users.id = ub2.buddy_id
WHERE
users.id = 1;
有人可以幫我嗎? 謝謝。
預期結果:
email-----user_id-----buddy_id-----status
s@s.com --1-----------2------------pending (If queryed on user 2)
p@p.com---1-----------2------------pending (If queried on user 1)
語境:
當user1
向user2
發送請求時, 只有一行被添加到user_buddies
表, status=pending
。 因此,對於user1
和user2
伙伴列表都使用相同的行創建。 因此,如果查詢user2
所需的電子郵件是user2's
。
您可以檢查以下查詢:
SELECT
users.email,
ub1.user_id,
ub1.buddy_id,
ub1.`status`
FROM
users
JOIN user_buddies ub1 ON users.id = ub1.user_id OR users.id = ub1.buddy_id
WHERE users.id = 2;
結果:
email user_id buddy_id status
p@p.com 1 2 pending (if queried on users.id = 2)
s@s.com 1 2 pending (if queried on users.id = 1)
編輯:
SELECT
(
SELECT
u.email
FROM users u
WHERE u.id =
IF (
users.id = ub1.user_id,
ub1.buddy_id,
ub1.user_id
)
) AS buddyEmail,
ub1.user_id,
ub1.buddy_id,
ub1.`status`
FROM
users
INNER JOIN user_buddies ub1 ON users.id = ub1.user_id
OR users.id = ub1.buddy_id
WHERE users.id = 2;
SELECT 'Userid' querysource, u.id, u.email, ub.*, u1.EMAIL AS Buddyemail
FROM @users u
JOIN @user_buddies ub ON u.id = ub.user_id
JOIN @users u1 ON u1.id = ub.BUDDY_ID
WHERE u.id = 1
UNION
SELECT 'Buddyidid', u.id, u.email, ub.*, u1.email AS Buddyemail
FROM @users u
JOIN @user_buddies ub ON u.id = ub.buddy_id
JOIN @users u1 ON u1.id = ub.user_ID
WHERE u.id = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.