select.union all .where.解决方案
来源:互联网 发布:随机森林算法 原理图 编辑:程序博客网 时间:2024/05/17 01:54
需求:有三张表且没有物理外键和逻辑外键,但我需要拿到三个表中需要的数据且不能重复,包括各字段名的值各个表中的数据且不能相同。
先创建三张表:A,B,C
A表:
B表:
C表:
三个表中没有关联字段,各表之间的字段数量是不一样的。
如果我们想要拿到三个表或更多表解决方案是使用union 活union all。
union:操作符用于合并两个或多个 SELECT 语句的结果集。且不会出现重复记录。
union all:操作符用于合并两个或多个 SELECT 语句的结果集。且会出现重复记录。
使用union之前一定要知道:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
否则出现下面这种错误:
第一种:
SELECT a.id AS id, a.name AS NAME, a.type AS TYPE,NULL AS age,NULL AS sex FROM A aUNIONSELECT b.id AS id,NULL AS NAME,NULL AS TYPE, b.age AS age,NULL AS sex FROM B bUNION SELECT c.id AS id,NULL AS NAME,NULL AS TYPE, c.age AS age ,c.sex AS sex FROM C c
获取的结果集:
但是这种有一个缺点就是你想要根据条件去查询的话就会出现问题
比如每个表多一个字段叫status状态 0和1表示
但想要的结果集就是所有status=1的 可以在每条sql前加一个status
具体看需求是怎么规定的。
SELECT a.id AS id, a.name AS NAME, a.type AS TYPE,NULL AS age,NULL AS sex,a.status AS STATUS FROM A a WHERE a.status=1UNIONSELECT b.id AS id,NULL AS NAME,NULL AS TYPE, b.age AS age,NULL AS sex ,b.status AS STATUS FROM B b WHERE b.status=1UNION SELECT c.id AS id,NULL AS NAME,NULL AS TYPE, c.age AS age ,c.sex AS sex,c.status AS STATUS FROM C c WHERE b.status=1
如果要排序或是分页 直接在后面加 order by 字段名 limit 0,10
第二种:
下面这条语句可以为我们解决单个条件查询。
SELECT * FROM(SELECT a.id AS id, a.name AS NAME, a.type AS TYPE,NULL AS age,NULL AS sex FROM A a UNIONSELECT b.id AS id,NULL AS NAME,NULL AS TYPE, b.age AS age,NULL AS sex FROM B b UNION SELECT c.id AS id,NULL AS NAME,NULL AS TYPE, c.age AS age ,c.sex AS sex FROM C c )X WHERE id='A'
带条件查询并获取的结果
如果是多个条件是查询不到结果集的,如果有请一定要在下面留言给我。
如果你对mysql感兴趣的话可以深入研究,
第一种为什么不能进行条件查询?
第二种为什么能进行条件查询?
我们可以探讨一下qq: 44702145
如果以上内容有错请在下面留言给我,等待我查看后会及时修改。
阅读全文
0 0
- select.union all .where.解决方案
- select 中的union 和union all用法
- select 中的union 和union all用法
- Select Union all 怎样对记录进行区分
- 'union all' two select sentences contain 'order by'
- union all
- Union all
- union all
- union all
- union all
- union all
- union all
- union,union all 等
- union all 和union
- UNION,UNION ALL,MINUS
- union union all
- UNION and UNION All
- union 和 union all
- 八 、DockerUI与Shipyard以及InfluxDB+cAdvisor+Grafana配置监控
- 合法回文-计蒜客
- javascript克隆对象
- 从btree的角度来说说为什么插入频繁的mysql innodb表必须要自增id 必须自增id
- 一个bug引发的哲学思考
- select.union all .where.解决方案
- 微服务实战(三):深入微服务架构的进程间通信
- 微服务实战(四):服务发现的可行方案以及实践案例
- mybatis延迟加载
- 微服务实践(五):微服务的事件驱动数据管理
- 微服务实战(六):选择微服务部署策略
- 技术的“好”与“坏”
- 微服务实践(七):从单体式架构迁移到微服务架构
- 阿里云学生机ubuntu搭建mysql开启3306,80,8080端口环境需要注意的地方