MySQL查询选择匹配的记录以及与匹配记录具有相同CID的记录

时间:2020-02-04 10:08:30

标签: mysql

表架构

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');

“信息” => 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

请帮助。 预先感谢。

1 个答案:

答案 0 :(得分:0)

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);
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

db <>提琴here

相关问题