表用户:
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
。
答案 0 :(得分:0)
您可以查看以下查询:
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;
答案 1 :(得分:0)
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