如何对比数据库表数据并设置ismatching变量
解决方案
表结构说明
registration表
实际包含字段:RegistratonId、Contact_Id、CommunicationId、Remark,修正语法错误后的建表语句:
CREATE TABLE registration ( Id INT NOT NULL AUTO_INCREMENT, -- 对应RegistratonId CONT_ID NUMBER(10,0), -- 对应Contact_Id COMM_ID NUMBER(10,0) NULL, -- 对应CommunicationId,允许为空 Remark VARCHAR(255), PRIMARY KEY(Id) );
Contact表
结构:
| ContactID | FirstName | LastName |
|---|
建表语句:
CREATE TABLE Contact ( Id INT NOT NULL AUTO_INCREMENT, -- 对应ContactID FirstName CHAR(30 BYTE), LastName CHAR(30 BYTE), PRIMARY KEY(Id) );
Communication表
结构:
| CommunicationId | FirstName | LastName |
|---|
建表语句:
CREATE TABLE Communication ( Id INT NOT NULL AUTO_INCREMENT, -- 对应CommunicationId FirstName CHAR(30 BYTE), LastName CHAR(30 BYTE), PRIMARY KEY(Id) );
需求实现SQL
针对指定的RegistrationId,可通过以下查询直接获取ismatching状态:
-- 替换@target_reg_id为你要查询的具体RegistrationId值 SELECT CASE WHEN r.CommunicationId IS NULL THEN TRUE WHEN c.FirstName = com.FirstName AND c.LastName = com.LastName THEN TRUE ELSE FALSE END AS ismatching FROM registration r LEFT JOIN Contact c ON r.Contact_Id = c.ContactID LEFT JOIN Communication com ON r.CommunicationId = com.CommunicationId WHERE r.RegistratonId = @target_reg_id;
逻辑说明
- 用
LEFT JOIN保证即使CommunicationId为空,查询仍能正常返回结果 - 通过
CASE分支判断触发条件:- 若
CommunicationId为null,直接返回TRUE - 若关联的Contact与Communication表中
FirstName和LastName完全匹配,返回TRUE - 不满足以上条件时返回
FALSE
- 若
内容的提问来源于stack exchange,提问作者soorya kumar
相关产品推荐
相关产品推荐

