sql 关联查询的一个问题
有两个表,A 表又来存储图书的名称。
id | name |
---|---|
1 | 酒国 |
2 | 红楼梦 |
B 表用来存储图书的别名
id | aId | name |
---|---|---|
1 | 2 | 石头记 |
2 | 2 | 风月宝鉴 |
请教一个sql:
查询“红楼梦”的时候返回
A.id | A.name | B.id | B.aId | B.name |
---|---|---|---|---|
2 | 红楼梦 |
查询“风月宝鉴”的是否返回
A.id | A.name | B.id | B.aId | B.name |
---|---|---|---|---|
2 | 红楼梦 | 2 | 2 | 风月宝鉴 |
求各位大佬帮忙。
回答
因为你描述得不是很清楚,我猜测你的场景有以下约束
- 对于同一本书,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中测试通过
以上是 sql 关联查询的一个问题 的全部内容, 来源链接: utcz.com/a/104086.html