gpt4 book ai didi

mysql - 如何编写mysql查询来实现以下类型的连接(Join based on value of a column)

转载 作者:行者123 更新时间:2023-11-30 22:20:07 24 4
gpt4 key购买 nike

表用户:

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 表中 状态=待定。因此,user1user2 好友列表都是使用同一行创建的。因此,如果查询 user2 所需的电子邮件是 user2 的

最佳答案

您可以检查以下查询:

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;

Check this fiddle of this new query

关于mysql - 如何编写mysql查询来实现以下类型的连接(Join based on value of a column),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36887004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com