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

阿雷洛维奇

我想获取所有用户的列表,并标记某个行值为16时也出现在另一个名为memo的表中的用户(基于其唯一标识符)。mp表的每一行都有一个工作程序和一个备忘录。工人是唯一的用户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中有一个条目,使得备忘录16的mp.worker = u.keyid,isin应该为1。

但是,此查询为我提供了一个完整的用户列表,其中包含所有0,以及备忘录中所有用户(再次)均为1。因此,可以说用户是John,Michael,Sarah和Jane。说只有约翰和简参加会议,我会得到以下结果:

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

但是我想要的是:

John       1
Micahel    0
Sarah      0
Jane       1

我应该怎么写才能得到我想要的?

拉斐尔的老房子

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

您只需要一个EXISTS子句(这也可以用来完成left join,但我认为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不是)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MySQL查询以在第二张表中查找值

MYSQL从第二张表中取消选择查询

在mysql中,如何与第二张表联接并获得具有最新日期的行?

在第二张表中根据最大值或总计选择行

根据第二张表中的值更新第一张表

根据Rails中的第一张表数据更新第二张表

第二张表中的MySQL CSV导出ID

MySQL:如果在第二张表中找到匹配的ID并添加缺少的内容,如何在第一张表中“覆盖”数据

如何使用第二张表中的ID更新第三张表中的ID来匹配第二张表中的MSSQL表值?

使用查询结果插入第二张表-Codeigniter

如果第二张表符合条件,我如何查询2张表并返回结果

我要在mysql中更新第二张表时自动更新表

MySQL,将第二张表放到另一个表中

使用mysql查询在表中查找第二个最大值

从mysql搜索结果在PHP表中

根据另一个表中列的结果在查询中更改日期

如何在多对多关系中编写查询,以从SQL查询中的第二张表中随机获取1条记录

通过添加第二个表的日期并减去SQL中第一个表的结果,根据第二个表中的值创建表视图

Laravel雄辩地拥有第二张表中的最大值?

第二和第三张表中具有最高值的行

用LEFT JOIN计算第二张表中的行

根据表中的值查询表

SQL-根据查询结果从一张表中获取计数

在Rails活动记录查询中使用联接时如何获取第二张表的结果

Linq查询联接表,如果值不在第二个表中

根据 PHP 中的结果运行第二个 MySQL 查询

MySQL查询-根据不同表中的列名获取行值

如何使用Laravel雄辩的查询根据第二个表的字段值的groupby从三个表中检索所有数据?

通过二维数组列的第二维中的值查询表