关于多表查询的问题

问题描述

假如有5张表 tblA,tblB,tblC,tblD,tblE;现在tblA是主表,其他表都是关系它的,设想如下:先查询出tblA的数据:select tblA.col1,null as 'tblB_col1',null as 'tblC_col1',null as 'tblD_col1',null as 'tblE_col1' from tblA 这个语句出来的结果放入map中,然后为null列补值,null列的数据来源于其余表:select tblB.col1 from tblB where tblB.key in (tblA.id)select tblB.col1 from tblC where tblB.key in (tblA.id)...不知道大家有没有好的建议? 问题补充:283433775 写道

解决方案

其实我想你也可以使用试图view来做,同样如果你真要用临时表的话,请使用存储过程,在数据库中建立临时表,然后塞入数据,再查询。 不能使用这种内存临时表的方式。
解决方案二:
引用数据量确实是个问题,其实视图我已经写好了,只是被否定了,哎,悲剧啊,难道你们老大的水平就是让你补值?不能跟它分析情况,让他给你种好方案吗?
解决方案三:
个人觉得,join可能会带来大数据量的问题,但是你把每个表都加载到内存,这也是大得问题。用一条sql做得话,检索起来会慢一些,但是我想应该不会由太多内存消耗,如果用你的方式,查询到内存表中的,那么如果有个表数据量太大,直接就是崩溃啊。
解决方案四:
用程序来实现当然是可以的, 但是这样你要对每个结果集进行遍历, 如果是大数据量的情况下,性能也好不到哪里去,一样要占用很大的内存开销的,你的需求是不是A表符合条件的数据都要出来?还是有一条语句来实现比较好
解决方案五:
请问为何不用一条语句搞定,你完全可以用一条语句搞定,然后用case when 来把横表转为纵表。

时间: 2024-10-28 23:54:55

关于多表查询的问题的相关文章

Mysql5 实现交叉表查询

交叉表.行列转换和交叉查询经典 一.什么是交叉表 "交叉表"对象是一个网格,用来根据指定的条件返回值.数据显示在压缩行和列中.这种格式易于比较数据并辨别其趋势.它由三个元素组成: 行 列 摘要字段 "交叉表"中的行沿水平方向延伸(从一侧到另一侧).在上面的示例中,"手套"(Gloves) 是一行. "交叉表"中的列沿垂直方向延伸(上下).在上面的示例中,"美国"(USA) 是一列. 汇总字段位于行和列的交叉

thinkphp多表查询

在学习thinkphp 的过程中,需要对多表进行操作,但是在实际过程中,总是遇到各种问题,所以写下这篇博文,作为自己的学习历程   在操作过程中,两表查询都没有问题,但是三表查询就开始出现问题   有以下三张表,分表为pl表(uid,content),user表(id,username),lyb表(uid,title)   多表查询操作有以下几种方法:   ㈠视图模型(推荐)   定义视图模型,只需要继承Think\Model\ViewModel,然后设置viewFields属性即可   复制代

用SQL进行多表查询

  所谓多表查询是相对单表而言的,指从多个数据表中查询数据,这里我们主要学习从两个数据表中如何查询数据的方法.4.3.1 无条件多表查询    无条件多表查询是将各表的记录以"笛卡尔"积的方式组合起来.    如scott.dept表共有4条记录,scott.emp表共有14条记录,其"笛卡尔"积将有4*14=56条记录.    在[命令编辑区]执行下列语句.    ――――――――――――――――――――――――――――――――――――――     select

用SQL进行单表查询

  单表查询是相对多表查询而言的,指从一个数据表中查询数据.4.2.1 查询所有的记录    在[命令编辑区]执行输入"select * from scott.emp",然后单击[执行]按钮,出现如图4.3所示的emp数据表所有记录.    [参见光盘文件]:\第4章\4.2\421.sql.    select * from 数据表,这里的"*"代表数据表中所有的字段.4.2.2 查询所有记录的某些字段    在[命令编辑区]输入"select empn

Access使用查询--1.3.用交叉表查询体现一组数据的对比

3.用交叉表查询体现一组数据的对比 新建查询,选择"交叉表查询向导",接着选择"车队运输查询",出现上面的对话框,从可用字段中选择"司机"字段作为行标题.单击下一步. 接着从字段中选择"货物类别"作为列标题.单击下一步. 选择"净重"字段,函数选择"求和",最后为这个交叉表查询起一个名字,向导结束. 上图是刚生成的查询的设计视图. 下表是交叉表的查询结果,清晰地对比了每个司机运输各种货物

将表/查询存储为标准的XML文件

xml|标准 /*--存为XML 将表/查询存储为标准的XML文件--*/ /*--调用示例 --用SQL用winows身份验证的情况 exec p_savexml @sql='地区资料',@fname='c:\地区资料.xml'  --用指定的用户 exec p_savexml @sql='地区资料',@fname='c:\地区资料.xml',@userid='sa'--*/if exists (select * from dbo.sysobjects where id = object_id

中文Access2000速成教程--2.2 定义与使用交叉表查询

access|教程|速成|中文 第二讲.定义与使用交叉表查询 交叉表查询显示来源于表中某个字段的总结值(合计.计算以及平均值等),并将它们分组放置在查询表中,一组列在数据表的左侧,一组列在数据表的上部.中文Visual FoxPro 6也有此功能,与之相比中文Access 2000的操作更简单,所使用的步骤如下所列: 步骤一.在"数据库"窗口单击"对象"列表组中的"查询"项,让它处于选定状态后单击"数据库"窗口工具栏中的&qu

python实现简易数据库(二) 单表查询和top N实现

上一篇中,介绍了我们的存储和索引建立过程,这篇将介绍SQL查询.单表查询和TOPN实现. 一.SQL解析 正规的sql解析是用语法分析器,但是我找了好久,只知道可以用YACC.BISON等,sqlite使用的lemon,捣整了一天没实现,就用了python的正则表达式. 1.删除无用的空格.跳格符.换行符等: 我们以分号';'作为一个sql语句的结束符,在输入分号之前,我们将输入的sql语句串接成一个string,在将整个sql语句的一些无用的字符删掉, 1 def rmNoUseChar(sq

Oracle数据库多表查询的实现

多表查询就是说从多个表中获取相应的数据. (1)笛卡尔积[连接条件无效或被省略,两个表的所有行都发生连接,所有行的组合都会返回 (n*m)] SQL> select e.ename,d.dname from emp e,dept d;//无效 SQL> select e.ename,d.dname from emp e,dept d 2  where e.ename='SCOTT';//有效 (2)等值连接(内连接或简单连接) 两个表的连接条件的列值必须相等,通常这样的连接包含一个主键和一个外

Nhibernate多表查询解决办法

概述: 在项目中应用NHibernate架构时,会经常遇到多表查询.因为项目上要用到,通过多天的查询总结了以下 两种解决方案. 解决方案: (1)使用HQL语句,然后把查询出的结果存入临时表中,然后再进行绑定. (2)使用select new OaxtJoinGlxt这种语法,根据查询的内容自己构建相应的实体类. 第一种方案实现具体过程: 我的需求如下: 我需要查询JkptOaxtOrganization实体类中的Orgid,及JkptGlxtOrganization实体类中的Orgname我需