我有两个表: 表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查询。
答案 0 :(得分:1)
您可以通过将user
与info
两次连接并再次回到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 |