【问题标题】:Mysql query select matched record plus record having same cid of the matched recordMysql查询选择匹配记录加上与匹配记录具有相同cid的记录
【发布时间】:2020-02-04 18:20:30
【问题描述】:

表架构

create table info(id integer, location_id integer, amount varchar(100), cid varchar(100));

INSERT INTO info
  (id, location_id, amount, cid)
VALUES
  ('1', '2', '5000', '1360'),
  ('2', '2', '3000', '2121'),
  ('3', '2', '2000', '1360'),
  ('4', '2', '1000', '2772'),
  ('5', '2', '3500', '1360');

create table users (
  userid integer,
  type varchar(18),
  accnum varchar(8),
  name varchar(28)
);

INSERT INTO users
  (userid, type, accnum, name)
VALUES
  ('1', 'patient', '8769', 'Ron K'),
  ('1', 'guarantor', '444321', 'Jhon W'),
  ('2', 'patient', '76890', 'Frank'),
  ('2', 'guarantor', '55543', 'Joe'),
  ('3', 'patient', '65438', 'Grace'),
  ('3', 'guarantor', '33332', 'bilbo'),
  ('4', 'patient', '89786', 'Sam'),
  ('4', 'guarantor', '432432', 'Susan'),
  ('5', 'patient', '90871', 'Subir'),
  ('5', 'guarantor', '555333', 'Sumit');

"Info" => id 可以根据类型(患者、担保人)在用户表中有两条记录。 现在,我需要获取与 accnum 字段匹配的所有记录,以及与该匹配记录共享相同“cid”值的记录。

当前查询::

SELECT
    guarantor.accnum as guarantorId,
    patient.name AS patientName,
    guarantor.name AS guarantorName,
    patient.accnum as patientAccountNumber,
    ob.amount,
    ob.id,
    ob.cid AS cid
    FROM info AS ob
    LEFT JOIN users AS patient ON (patient.userid = ob.id AND patient.type = 'patient')
    LEFT JOIN users AS guarantor ON (guarantor.userid = ob.id AND guarantor.type = 'guarantor')
    WHERE 
    1
    AND (
    patient.name LIKE "%8769%"
    OR patient.accnum LIKE "%8769%" 
    OR ob.cid LIKE "%8769%"
    ) 
    AND ob.location_id IN(2)

当前结果 ::

guarantorId | guarantorName | patientName   | patientAccountNumber  | amount | id | cid
------------ --------------- --------------- ----------------------- -------- ---- ------
444321      | Jhon W        |   Ron K       |   8769                |  5000  | 1  | 1360

预期结果::

guarantorId | guarantorName | patientName   | patientAccountNumber  | amount | id | cid
------------ --------------- --------------- ----------------------- -------- ---- ------
444321      | Jhon W        |   Ron K       |   8769                |  5000  | 1  | 1360
33332       | bilbo        |    Grace       |   65438               |  2000  | 3  | 1360
555333      | sumit        |    subir       |   90871               |  3500  | 5  | 1360

请帮忙。 提前致谢。

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT guarantor.accnum as guarantorId,
           guarantor.name AS guarantorName,
           patient.name AS patientName,
           patient.accnum as patientAccountNumber,
           ob.amount,
           ob.id,
           ob.cid AS cid
    FROM info AS o
    JOIN users AS p ON (p.userid = o.id AND p.type = 'patient')
    JOIN info AS ob ON o.cid = ob.cid
    JOIN users AS patient ON (patient.userid = ob.id AND patient.type = 'patient')
    JOIN users AS guarantor ON (guarantor.userid = ob.id AND guarantor.type = 'guarantor')
    WHERE 1
      AND (    p.name LIKE "%8769%"
            OR p.accnum LIKE "%8769%" 
            OR o.cid LIKE "%8769%" ) 
      AND o.location_id IN(2);
    
    担保人ID |担保人姓名 |患者姓名 |患者帐号 |金额 |编号 | cid :------------ | :------------ | :------------ | :-------------------- | :----- | -: | :--- 444321 |约翰 W |罗恩 K | 8769 | 5000 | 1 | 1360 33332 |比尔博 |格蕾丝 | 65438 | 2000 | 3 | 1360 555333 |峰会 |苏比尔 | 90871 | 3500 | 5 | 1360

    db小提琴here

    【讨论】:

    • 按预期工作... :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多