gpt4 book ai didi

MYSQL:根据值是否在第二个表中获取表中的 1 或 0 查询结果

转载 作者:行者123 更新时间:2023-11-29 22:15:25 25 4
gpt4 key购买 nike

如果某个行值为 16,我想获取所有用户的列表,并标记也出现在另一个名为 memo 的表中的用户(基于其唯一标识符)。mp 表的每一行都有一个工作人员和一份备忘录。 Worker 是唯一的用户 ID。因此,如果 u.keyid = mp.worker 且 mp.memo = 16,则用户位于备忘录中(例如 16)。这是我编写的查询。

SELECT DISTINCT  
u.name AS name,
IF ((mp.worker = u.keyid AND mp.memo = 16),1,0) AS isin
FROM users AS u, mp;

如果表 mp 中有一个条目使得 mp.worker = u.keyid 对应于备忘录 16,则 isin 应该为 1。

然而,这个查询为我提供了全部为 0 的用户的完整列表,以及备忘录中全部为 1 的所有用户(再次)。所以说用户是 John、Michael、Sarah 和 Jane。假设只有约翰和简参加了 session ,我得到这个结果:

John       0
Micahel 0
Sarah 0
Jane 0
John 1
Jane 1

但我想要的是:

John       1
Micahel 0
Sarah 0
Jane 1

我应该怎样写才能得到我想要的东西?

最佳答案

您的查询正在执行CROSS JOIN(笛卡尔积)。

您只需要一个EXISTS子句(这也可以通过左连接来完成,但我认为EXISTS更清晰)

SELECT u.Name
CASE WHEN EXISTS (Select null from mp
where mp.worker = u.keyid
and mp.memo = 16)
THEN 1 else 0 END
AS isin
FROM users u

您当然可以使用 IF 子句代替 CASE...WHEN (这是 ANSI,而 IF 不是)

关于MYSQL:根据值是否在第二个表中获取表中的 1 或 0 查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31242771/

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