mysql查询没有关联的三张表 | 您所在的位置:网站首页 › select两个表但不join › mysql查询没有关联的三张表 |
因为业务需求,遇到了这么一个查询,本想一个联合查询就完事了,谁知三张表之间没有任何关联,这就使我苦恼了半天,终于想出了解决办法。 首先,三张表之间没有任何关联,字段也不尽相同,我们要使查询结果合并就需要使用 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 实验室设备网 版权所有 |