1527-患某种疾病的患者

发布时间 2023-07-11 15:53:03作者: OnlyOnYourself-Lzw

患某种疾病的患者

原文地址:1527. 患某种疾病的患者 - 力扣(LeetCode)

  • 题目如下所示

个人题解

这题看起来需要做 MySQL 当中的字符串分割,难度很大。但是其实只使用一个LIKE关键字就能解决,骚操作。以下为个人思考过程

  • -- 1. 建表
    CREATE TABLE 1527_Patients(
    	patient_id INT,
    	patient_name VARCHAR(20),
    	conditions VARCHAR(50),
    	PRIMARY KEY(patient_id)
    );
    -- conditions 表示 包含 0 个或以上的疾病代码,以空格分隔
    
    -- 2. 编写 SQL,查询患有 I 类糖尿病的患者 ID ,患者姓名,以及其患有的所有疾病代码。I 类糖尿病的代码总是包含前缀 DIBA1
    
    -- 这题题干说明 conditions 字段中的值以空格作为分隔符,MySQL 中如何做分割呢?
    -- 目前还不了解
    
    -- SUBSTRING_INDEX(str,delim,count)
    
    SELECT SUBSTRING_INDEX(pa.conditions,' ', LENGTH(pa.conditions) - LENGTH(REPLACE(pa.conditions,' ','')) + 1) FROM 1527_Patients pa;
    
    -- ... 不会用
    
    -- 难道说简单用 like 就可以?总感觉不对,因为前面也有可能是 ... ADIAB100 ...,很明显这个不对啊
    
    SELECT pa.patient_id, pa.patient_name, pa.conditions FROM 1527_Patients pa WHERE pa.conditions LIKE '%DIAB1%';
    
    -- 拿去试了一下,果然不行
    -- 那只能去看大佬们的题解了
    
    -- ...............................
    
    -- 巧用 like 关键字的 % 
    SELECT pa.patient_id, pa.patient_name, pa.conditions FROM 1527_Patients pa WHERE pa.conditions LIKE 'DIAB1%' OR pa.conditions LIKE '% DIAB1%';
    
    -- 这两个条件分别表示,conditions 当中 字符串以 DIAB1 开头,结果不管,第二个表示以空格作为分隔符后疾病的前缀