Mysql Query返回匹配记录以及额外的记录,这些记录共享匹配查询记录的字段“ CID”的相同值

时间:2020-02-03 17:27:52

标签: mysql

我有两个表: 表1名称::用户

| id  |  accnum | name  
|-----|---------|-------
| 1   |  111112 |Jhon S
| 2   |  111113 |Steven R
| 3   |  111114 |Ron S  
| 4   |  111115 |Alex R
| 5   |  111116 |Rony A

表2名称::信息

| userid  |  cid    | amount
|---------|---------|-------
| 1       |  31      |111
| 2       |  21      |121
| 3       |  31      |131  
| 4       |  41      |141
| 5       |  31      |151

现在,我需要一个mysql查询,该查询应在以下关键字“ 111114”的搜索结果中产生 关键字搜索表“ user”字段“ accnum”返回匹配的accnum字段行,还返回共享匹配结果信息表的“ cid”值相同的行。 例如“ 111114”与在信息表中具有“ cid” => 31的用户表“ id” =>“ 3” name =>“ Ron S”相关联。 现在cid = 31值共享其他两行用户(1,5)。

预期结果如下:

| id  |  accnum | name    | cid
|-----|---------|---------|----
| 1   |  111112 |Jhon S   | 31
| 3   |  111114 |Ron S    | 31
| 5   |  111116 |Rony A   | 31

请帮助进行单个mysql查询。

2 个答案:

答案 0 :(得分:1)

您可以通过将userinfo两次连接并再次回到user来做到这一点:

select u2.*, i2.cid
from user u1 
inner join info i1 on i1.userid = u1.id
inner join info i2 on i2.cid = i1.cid
inner join user u2 on u2.id = i2.userid
where u1.accnum = 111114

请参见demo
结果:

| id  | accnum | name   | cid |
| --- | ------ | ------ | --- |
| 1   | 111112 | Jhon S | 31  |
| 3   | 111114 | Ron S  | 31  |
| 5   | 111116 | Rony A | 31  |

答案 1 :(得分:0)

模式(MySQL v5.7)

CREATE TABLE user (
  `id` INTEGER,
  `accnum` INTEGER,
  `name` VARCHAR(8)
);

INSERT INTO user
  (`id`, `accnum`, `name`)
VALUES
  ('1', '111112', 'Jhon S'),
  ('2', '111113', 'Steven R'),
  ('3', '111114', 'Ron S'),
  ('4', '111115', 'Alex R'),
  ('5', '111116', 'Rony A');

CREATE TABLE info (
  `userid` INTEGER,
  `cid` INTEGER,
  `amount` INTEGER
);

INSERT INTO info
  (`userid`, `cid`, `amount`)
VALUES
  ('1', '31', '111'),
  ('2', '21', '121'),
  ('3', '31', '131'),
  ('4', '41', '141'),
  ('5', '31', '151');

查询#1

select u1.id,u1.accnum,u1.name,i1.cid
from user u1
inner join info i1 on u1.id=i1.userid
inner join (select i2.cid as cid
from user u2 inner join info i2 on u2.id=i2.userid
and u2.accnum="111114") t on t.cid=i1.cid;
| id  | accnum | name   | cid |
| --- | ------ | ------ | --- |
| 1   | 111112 | Jhon S | 31  |
| 3   | 111114 | Ron S  | 31  |
| 5   | 111116 | Rony A | 31  |

View on DB Fiddle