mysql查询没有关联的三张表 您所在的位置:网站首页 select两个表但不join mysql查询没有关联的三张表

mysql查询没有关联的三张表

#mysql查询没有关联的三张表| 来源: 网络整理| 查看: 265

因为业务需求,遇到了这么一个查询,本想一个联合查询就完事了,谁知三张表之间没有任何关联,这就使我苦恼了半天,终于想出了解决办法。

首先,三张表之间没有任何关联,字段也不尽相同,我们要使查询结果合并就需要使用  union all  关键字(过滤重复数据使用union 就可以了)

假设我们有三张表 user,info,system

查询如下

select * from (

(select user.id as aaaid  from user)

union all  (select info.id from info)

union all  (select system.id from system)

) as abc

这样的查询会以第一张表查询的列为列头  所以上述查询的列头应该是 aaaid ,那么这样的查询一旦列的类型和数量不对应的话,就会出错,另外,最后的 as abc是必须添加的,mysql会把三张表的查询结果存在虚拟表 abc 中

如果我要查询第二张表里的 age 字段,而第一张表和第三张表中没有此字段,可以用第一张表里的任意一个类型对应的字段代替,只要第三张表给出对应类型的字段也能查询出结果,也可以用常量来代替查询结果,但是如果三张表的列数量和类型都不尽相同,那这样的查询就无法应对。对于这种情况,我们的查询应该是这样的:

select * from (

(select user.id as aaaid,null as age  from user)

union all  (select info.id,info.age from info)

union all  (select system.id,null  from system)

) as abc

这样,我们就把对应的第二张表中的 age 字段查询出来了,而且把第一张表和第三张表中对应的内容填上了null,这时候的查询结果基本满足我们的需求,如果需要添加条件或者分页的话,查询就变成了这样:

select * from (

(select user.id as aaaid,null as age  from user)

union all  (select info.id,info.age from info)

union all  (select system.id,null  from system)

) as abc

where age is not null

limit 0,10

 

where条件下的列就是第一张表查询的列,否则会报错。

这样,我们就完成了三张不同列、无关系表的条件查询和分页。

在此记录一下

转载请说明出处https://blog.csdn.net/qq_36395578/article/details/84936605



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有