当前位置: 首页 > 知识库问答 >
问题:

比较两个表,如果值存在则显示1,如果值不存在则显示0

从劲
2023-03-14

SQL架构

CREATE TABLE SNMASTER ( 
  SERIAL_NUMBER varchar(50),
  WORK_ORDER int(5),
  ASSY_ID int(3)
);
  
CREATE TABLE TRANSACTIONS ( 
  SERIAL_NUMBER varchar(50),
  OPERATION_ID int(5),
  CREATED_ON DATETIME
);
  
INSERT INTO SNMASTER VALUES('0910A40877',56794,841);
INSERT INTO SNMASTER VALUES('0910A40886',56794,841);
INSERT INTO SNMASTER VALUES('0910A40895',56794,841);
INSERT INTO SNMASTER VALUES('0910A40902',56794,841);
INSERT INTO SNMASTER VALUES('0910A40911',56794,841);
INSERT INTO SNMASTER VALUES('0910A40920',88545,841);
INSERT INTO SNMASTER VALUES('0910A40939',88545,841);
INSERT INTO SNMASTER VALUES('0910A40948',88545,841);
INSERT INTO SNMASTER VALUES('0910A40957',97846,842);
INSERT INTO SNMASTER VALUES('0910A40966',97846,842);
  
INSERT INTO TRANSACTIONS VALUES('0910A40886',113,'2020-02-27 13:39:46');
INSERT INTO TRANSACTIONS VALUES('0910A40877',116,'2020-02-27 13:39:48');
INSERT INTO TRANSACTIONS VALUES('0910A40886',116,'2020-02-27 13:40:03');
INSERT INTO TRANSACTIONS VALUES('0910A40939',113,'2020-02-27 13:40:20');
INSERT INTO TRANSACTIONS VALUES('0910A40886',160,'2020-02-27 13:40:48');

我需要这样显示我的结果:

SERIAL_NUMBER  113  116  160
 0910A40877    0    1    0
 0910A40886    1    1    1
 0910A40895    0    0    0
 0910A40902    0    0    0
 0910A40911    0    0    0

结果显示表SNMASTER的前5行

然后查看表事务,并在有OPERATION_ID时写入1

共有1个答案

贝成业
2023-03-14

您可以使用exists:

select sm.*,
       (exists (select 1
                from transactions t
                where t.serial_number = sm.serial_number and t.operation_id = 113
               )
       ) as has_113,
       (exists (select 1
                from transactions t
                where t.serial_number = sm.serial_number and t.operation_id = 116
               )
       ) as has_116,
       (exists (select 1
                from transactions t
                where t.serial_number = sm.serial_number and t.operation_id = 160
               )
       ) as has_160
from snmaster sm;

对于事务(serial_number,operation_id)的索引,这可能是最快的方法。

在MySQL中,exists返回一个布尔值。数据库将1视为true,而将0视为false,这就是为什么这样做可以满足您的需要。在其他数据库中,您需要将exists包装在case表达式中。

 类似资料:
  • 我有三个表表1、表2、表3。表1有a、b列。表2有c、b、d列。表3有d、e列 我需要匹配表1、b上的表2,以及d上的表2和表3。我需要在表1的“a”列中显示数据,如果表2和表3中存在匹配的行,那么我需要在表3中显示列“e”以及列“a”。如果表2和表3之间的匹配中不存在行,我可以显示null。 让我知道任何澄清或数据。我使用sqlite3,但存在子句的工作方式似乎就像在sql中一样。 我尝试了,但

  • 如果值为空,则需要在单元格中显示一个不间断的空格。这是我的模板: 我试过这个,但不管用: 它返回值的问题是: 如果许可证号带有值,则单元格为空,行颜色如下所示。 利用卢库马的建议,它表明了这一点: 更改筛选器中的if语句后,仍然不显示非值:

  • 问题内容: 我有一个钥匙型课。让我们称为map的实例。 我要添加{ ,}(是的一个实例,并且一)该地图。但是,如果键已经存在,我想求和该映射图中的当前值。 目前我使用 但是在Java 8中是否有一种时髦的方式来做到这一点,例如使用和? 遗憾的是我无法弄清楚。 谢谢。 问题答案: 这就是地图上的合并功能的作用。 这可以进一步减少到 它基本上等于

  • 问题内容: 使用Sql Server2012。我有一个存储过程,它的一部分检查用户名是否在表中。如果是,则返回1,否则返回2。这是我的代码: 但是,我一直收到以下错误: ‘1’附近的语法不正确。 使用IF EXIST甚至可以做到吗? 问候 问题答案: 如果您想这样做,那么这就是您要遵循的语法。 您不一定严格要求这些语句,但是最好是从一开始就养成这种习惯。

  • 问题内容: 我很沮丧,我不知道该怎么做。 基本上,我只想创建一个表,但是如果它存在,则需要将其删除并重新创建,而不是将其截断,但是如果不存在,则可以创建它。 有人可以帮忙吗? 谢谢乔治 问题答案: 放在tablename您的发言之前。 该语句将删除该表(如果存在),但如果不存在则不会引发错误。

  • 问题内容: 我试图获得过去7天注册的用户数量以显示在图表上,如果mysql返回0而不是没有行,那将是很好的。目前,它只返回每天都有一行值的行 问题答案: 尝试: