簡體   English   中英

如何編寫mysql查詢來實現以下類型的連接(基於列的值加入)

[英]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)

語境:

user1user2發送請求時, 只有一行被添加user_buddies表, status=pending 因此,對於user1user2伙伴列表都使用相同的行創建。 因此,如果查詢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;

SQL FIDDLE DEMO

結果:

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.

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