因为你描述得不是很清楚,我猜测你的场景有以下约束
- 对于同一本书,A.name不可能在B.name中再出现
- 你的查询每次只传入一个书名
如果上述成立,则可以这样解决,首先创建表A和B
-- drop table A;
CREATE TABLE A
(id int,
name varchar(30),
PRIMARY KEY(id));
insert into A values (1, "酒国");
insert into A values (2, "红楼梦");
-- drop table B;
create table B ( id int,
aid int,
name varchar(30),
primary key(id));
insert into B values (1,2, "石头记");
insert into B values (2,2, "风月宝鉴");
然后通过以下SQL查询
(
select
id as 'a.id',
name as 'a.name',
null as 'b.id',
null as 'b.aid',
null as 'b.name'
from
a
where
name = '某本书的真名或者别名' )
union all
(
select
*
from
a inner join b
on
a.id=b.aid
where
b.name = '某本书的真名或者别名'
)
则传入的名字为红楼梦
时结果为
传入的名字为风月宝鉴
时结果为
以上代码在mysql8中测试通过
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…