gpt4 book ai didi

mysql - 如何运行此 MySQL JOIN 查询?

转载 作者:搜寻专家 更新时间:2023-10-30 22:02:49 26 4
gpt4 key购买 nike

假设我有 2 张 table 。

第一个表是角色列表。一个用户可以有多个角色。

mysql> select id, user_id, name from personas_personas;
+----+---------+--------------+
| id | user_id | name |
+----+---------+--------------+
| 8 | 1 | startup |
| 9 | 1 | nerd |
| 10 | 1 | close |
| 12 | 2 | Nerd |
| 13 | 2 | Startup |
| 14 | 2 | Photographer |
+----+---------+--------------+
6 rows in set (0.00 sec)

现在,我有另一个名为“approvals”的表。

mysql> select id, from_user_id, to_user_id, persona_id  from friends_approvals;
+----+--------------+------------+------------+
| id | from_user_id | to_user_id | persona_id |
+----+--------------+------------+------------+
| 2 | 1 | 2 | 8 |
| 3 | 1 | 2 | 9 |
+----+--------------+------------+------------+
2 rows in set (0.00 sec)

如果 from_user 想要批准 to_user 到角色,则插入一条记录。

我正在尝试执行此查询...

给定一个用户,找到它的所有角色。然后,对于每个角色,确定它是否被批准用于某个 to_user。如果是,则在结果集中返回 is_approved=1。否则,在结果集中返回is_approved=0。

所以这是我开始的地方:

SELECT *
FROM personas_personas
WHERE user_id = 1
LEFT JOIN friends_approvals ON
...but i don't know where to go from here.

因此,最终结果集应该包含 personas_personas 表中的所有列,然后还有每个结果的 is_approved

最佳答案

 SELECT 
pp.*,
CASE
WHEN exists (
SELECT
*
FROM
friends_approvals fa
WHERE
fa.from_user_id = pp.user_id AND
fa.persona_id = pp.id AND
fa.to_user_id = 2
)
THEN 1
ELSE 0
END as is_approved

FROM
personas_personas pp
WHERE
pp.user_id=1

或者,根据您的口味:

 SELECT 
pp.*,
CASE
WHEN fa.from_user_id IS NOT NULL
THEN 1
ELSE 0
END as is_approved

FROM
personas_personas pp
LEFT OUTER JOIN friends_approvals fa ON
pp.user_id = fa.from_user_id AND
pp.id = fa.persona_id AND
fa.to_user_id = 2
WHERE
pp.user_id=1

关于mysql - 如何运行此 MySQL JOIN 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8321424/

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