问答

sql 关联查询的一个问题

作者:admin 2021-05-07 我要评论

有两个表,A 表又来存储图书的名称。 id name 1 酒国 2 红楼梦 B 表用来存储图书的别名 id aId name 1 2 石头记 2 2 风月宝鉴 请教一个sql: 查询“红楼梦”的时...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

有两个表,A 表又来存储图书的名称。

idname
1酒国
2红楼梦

B 表用来存储图书的别名

idaIdname
12石头记
22风月宝鉴

请教一个sql:

查询“红楼梦”的时候返回

A.idA.nameB.idB.aIdB.name
2红楼梦

查询“风月宝鉴”的是否返回

A.idA.nameB.idB.aIdB.name
2红楼梦22风月宝鉴

求各位大佬帮忙。

###

因为你描述得不是很清楚,我猜测你的场景有以下约束

  • 对于同一本书,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 = '某本书的真名或者别名'
)

则传入的名字为红楼梦时结果为
图片.png

传入的名字为风月宝鉴时结果为
图片.png

以上代码在mysql8中测试通过

###

找到方法了,join 后的语句再加一个条件

join A.id = B.aId and B.name like '%红楼梦%'

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • sql 关联查询的一个问题

    sql 关联查询的一个问题

  • echarts饼图在鼠标移走之后,仍然需要

    echarts饼图在鼠标移走之后,仍然需要

  • react 中components 中的组件无法引入

    react 中components 中的组件无法引入

  • selenium的webdriver可以以无窗口的方

    selenium的webdriver可以以无窗口的方

腾讯云代理商
海外云服务器