一对多表查询的查询

您当前的位置: >
yii_Yii框架多表查询:一对一和多表条件联合查询
作者:中国排行网&&&来源:新闻频道&&&时间:日
Yii框架多表查询:一对一和多表条件联合查询
在网上查过了很多yii框架多表查询的问题,但总没有适合自己的,自己建了几张表过来分析,把操作写出来分享Yii框架多表查询(一对一与多对一)和多表条件联合查询给大家: 查一对一或多对一(常使用到的就是文章和文章分类关系) 在yii数据库模型中比如有一个Post.php文...
3D印花的魅力 Yii品牌造型图集释出
3D印花的魅力 Yii品牌造型图集释出 3D印花的魅力 Yii品牌造型图集释出 今次,时尚品牌Yii 带来了2014春夏季服装造型图集。以精简化色彩和宽松版型为主导的该系列作品格外干净,而极具看点的无疑便是 Yii 为本季作品挑选的印花了。品牌于本季的加长版衬衫和卫...2KB。
Yii Framework 自定义排序的问题
没那个功夫仔细阅读 yii 的文档,赶鸭子上架般匆匆用它做了个网站,默认的功能里有些要改,费了老大子劲解决了一些,赶紧写下来。 有一列数据 A 既包含数字也包含字符串,老板说排序的时候只对 数字排,字符串的都不要显示在前头,也就是说排序的时候忽略所有字符...
PHP 开发框架 Yii 1.1.14 RC 发布
Yii 1.1.14 RC 发布了,该版本中修复了超过 80 个bug,引入超过 60 项增强和新特性。增加 CPasswordHelper 提供安全和更新的方法用来存储和验证密码;增加 CRedisCache 以支持 Redis 缓存;可作为 Composer package 来安装。完整的列表请看 change log....
从成都走向世界:6位85后创业者的创业历程
这个来自成都的团队叫 Yii Studio,2011年9月份上线第一款产品 Magic Painter,一个简单的操作便能产生很多绚丽效果的特效绘图软件。由于有足够的技术支撑和交互设计能力,Yii Studio在第一款应用中便使用了自己开发的游戏引擎GLeam,打造了一款与众不同的绘图...
法弗科技利用WEB新技术使网站应用更优秀
从法弗网络科技有限公司(以下简称&法弗科技&)的开发案例中可以看到很多的WEB产品都是基于Joomla和Drupal以及YII(Yii Framework)等优秀且强大的PHP框架来开发实现的,其中Joomla和Drupal更是多次获得全球最佳PHP框架大奖,像哈佛大学、美国白宫、劳当麦...2KB。
36氪+ 每周初创项目观察第33期
Real Strike AR把摄像头画面和3D枪械动画结合起来,模拟真实射击体验,把森林,街道,办公室等任何环境变成战场,在这个战场中用户可以一边射击,一边录像,拍摄视频。 Yii Studio成立于2011年底,团队成员6人,其中CEO 4年互联网工作经验;CTO曾就职于TopC...
延伸阅读:
本月热榜排行
热榜历史排行看标题可能看的不明白。举例子来说
A表是班级表,字段:ID=班级编号,Name=班级名字
B表是学生表,字段:ID=班级编号,SID= 学生编号。
就是查询班级表的全部信息,然后也要查询出来班级表对应的学生数量。在群里问问,总结有两个比较简单,清晰的方法
第一个方法(城主):
select a.*, (select count(*) from b where b.ID=a.id) as&学生数量& from& a
这个看着比较清楚简单,
第二个方法(泪吻星痕):
select a.*,xx.人数from& a, (select b.ID,count(ID) as 人数 from b
group by b.ID) xxwhere a.ID = xx.ID这个方法用到一个临时表,相当于是先构造一个临时表,然后用班
级表A和临时表做关联
泪吻星痕推荐使用第二个方法,理由是关联查询快,他也做过测试。我目前忙项目,自己还没有测试比较两个性能
但是其实两个sql查询的结果是不一样的
使用第一个方法,
查询出来班级信息和班级对应的学生数量。即使学生数量是0也是有班级信息的记录
第二个方法确如果学生数量为0的话,就不会显示对应的班级信息。
不过这个是小问题只要修改join关系就可以
select a.*,xx.人数 from& a left join& (select b.ID,count(ID) as 人数
from b group by b.ID)
xx on a.ID = xx.ID
阅读(...) 评论()ACCESS模拟试题题库
本试题来自:(2014年ACCESS模拟试题,)一、选择题当数据访问页包含来自两个表或查询的字段时,这些表或查询应具有
A) 一对一关系
B) 一对多关系
C) 多对一关系
D) 多对多关系正确答案:有, 或者
您可能感兴趣的试题
单项选择题:()在窗体中添加一个命令按钮(名称为Command1)和一个文本框(名为text1),然后编写如下事件过程:
Private Sub Command_Click()
 Dim x As Integer, y As Integer, z As Integer
 x=5: y=7: z=0
 Me!Text1=""
Call p1(x, y, z)
Me!Textl=z
Sub p1 (a As Integer, b As Integer, Byval c As Integer)
打开窗体运行后,单击命令按钮,文本框中显示的内容是A.12B.0C.5D.7答案:有,单项选择题:()在名为Form1的窗体上添加三个文本框和一个命令按钮,其名称分别为Text1、Text2、Text3和Command1,然后编写如下两个事件过程:
Private Sub Command1_Click()
 Text3=Textl+1Text2
private Sub Form1_Load()
 Text1=""
 Text2=""
 Text3=""
打开窗体Form1后,在第一个文本框(Text1)和第二个文本框(Text2)中分别输入5和7,然后单击命令按钮Command1,则文本框(Text3)中显示的内容为A.57B.12C.5D.出错答案:有,
ACCESS模拟试题最新试卷
ACCESS模拟试题热门试卷页面导航:
→ 正文内容 多表连接
sql 多表连接查询
sql 多表连接查询语句代码,大家可以参考下。
新建两张表:表1:student& 截图如下:表2:course& 截图如下:(此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键。)一、外连接外连接可分为:左连接、右连接、完全外连接。1、左连接& left join 或 left outer joinSQL语句:select * from student left join course on student.ID=course.ID执行结果:左外连接包含left join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL).注:此时我们不能说结果的行数等于左表数据的行数。当然此处查询结果的行数等于左表数据的行数,因为左右两表此时为一对一关系。2、右连接& right join 或 right outer joinSQL语句:select * from student right join course on student.ID=course.ID执行结果:右外连接包含right join右表所有行,如果左表中某行在右表没有匹配,则结果中对应左表的部分全部为空(NULL)。注:同样此时我们不能说结果的行数等于右表的行数。当然此处查询结果的行数等于左表数据的行数,因为左右两表此时为一对一关系。3、完全外连接& full join 或 full outer joinSQL语句:select * from student full join course on student.ID=course.ID执行结果:完全外连接包含full join左右两表中所有的行,如果右表中某行在左表中没有匹配,则结果中对应行右表的部分全部为空(NULL),如果左表中某行在右表中没有匹配,则结果中对应行左表的部分全部为空(NULL)。二、内连接& join&或 inner joinSQL语句:select * from student inner join course on student.ID=course.ID执行结果:inner join 是比较运算符,只返回符合条件的行。此时相当于:select * from student,course where student.ID=course.ID三、交叉连接 cross join1.概念:没有 WHERE 子句的交叉联接将产生连接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。SQL语句:select * from student cross join course执行结果:如果我们在此时给这条SQL加上WHERE子句的时候比如SQL:select * from student cross join course where student.ID=course.ID此时将返回符合条件的结果集,结果和inner join所示执行结果一样。四、两表关系为一对多,多对一或多对多时的连接语句当然上面两表为一对一关系,那么如果表A和表B为一对多、多对一或多对多的时候,我们又该如何写连接SQL语句呢?其实两表一对多的SQL语句和一对一的SQL语句的写法都差不多,只是查询的结果不一样,当然两表也要略有改动。比如表1的列可以改为:Sno Name Cno表2的列可以改为:Cno CName这样两表就可以写一对多和多对一的SQL语句了,写法和上面的一对一SQL语句一样。下面介绍一下当两表为多对多的时候我们该如何建表以及些SQL语句。新建三表:表A:& student 截图如下:表B:& course 截图如下:表C:& student_course 截图如下:一个学生可以选择多门课程,一门课程可以被多个学生选择,因此学生表student和课程表course之间是多对多的关系。当两表为多对多关系的时候,我们需要建立一个中间表student_course,中间表至少要有两表的主键,当然还可以有别的内容。SQL语句:select s.ame from student_course as sc left join student as s on s.Sno=sc.Sno left join course as c o执行结果:此条SQL执行的结果是学生选课的情况。 以下是特色补充:select * from (SELECT id,jihao, ht.hetongid, hetonghao, banshichu, zulindanwei, jiansheluduan, shebeijinchangriqi,hetongfangshi, jine,yusuangongchengliang,(ht.jine/30)*(datediff(day,ht.shebeijinchangriqi,getdate())) as yusuanjine,yihuikuanjine, ((ht.jine/30)*(datediff(day,ht.shebeijinchangriqi,getdate()))-yihuikuanjine) as qiankuanjine,ht.shebeituichangriqi FROM db_hetongguanli_y_g as ht left join select sum (gongchengliang) as yusuangongchengliang ,hetongid from db_meirigongchengliang group by hetongid) as d on ht.hetongid=d.hetongid left join(select sum(shijihuikuanjine) as yihuikuanjine,hetongid from db_huikuan group by hetongid) as a on ht.hetongid=a.hetongid ) as b where b.hetongfangshi='月租' and b.hetongid=(select hetongid from db_shebeixinxi where jihao='" + this.DropDownList1.SelectedValue + "')"; ================================================================================================== select * from (select ht.id,ht.qiandingren,ht.hetongid,ht.banshichu,ht.jihao,ht.hetonghao,ht.zulindanwei, ht.jiansheluduan,ht.qingqianriqi,ht.lumianshigongcailiao,ht.hetongfangshi,ht.jine,ht.hetongqiandingriqi, ht.hetongjiesuanjine,ht.hetongjiesuanriqi,ht.shebeijinchangriqi,ht.shebeituichangriqi,ht.jiesuangongchengliang, d.yifukuanjine, (ht.hetongjiesuanjine-d.yifukuanjine) as qiankuanjine,ht.kaipiaojine,ht.ranyoufei,ht.yunfei, ht.qitafeiyong,ht.feiliaofei from db_hetongguanli_y_g as ht left join (select hetongid,sum(shijihuikuanjine) as yifukuanjine from db_huikuan group by hetongid) as d on ht.hetongid=d.hetongid) as a where a.hetongid=(select hetongid from db_shebeixinxi where jihao='5666') go
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910查看: 567|回复: 19
关于查询一对多的问题,找了论坛上的一些帖子,都是返回值放在一个单元表格里的。
阅读权限20
在线时间 小时
本帖最后由 hyzhangyong 于
14:32 编辑
关于查询一对多的问题,找了论坛上的一些帖子,都是返回值放在一个单元表格里的。
另外有一帖,比较符合要求,但他订单编号在数据是唯一的一列,由于对VBA不是很熟悉,改了一天,都无法实现,只好来求助了。
请查看附件。要求和数据表格在里面。请各位老师帮忙一下,谢谢!
我的思路是这样的:根据表1的客户号,遍历表2对应的数据,保存在数组里,然后根据数组的计数N,在表中1中对应的地方添加N列,并将数组中保存的数据写入新增的列中。
代码不知道如何实现,{:soso_e101:}
有坛友说附件表格有宏病毒,我下载一个宏病毒专杀的,杀毒了,重新更新。这次应该是没问题的了,在此对造成影响的坛友说声对不起了。
(5.7 KB, 下载次数: 12)
14:32 上传
点击文件名下载附件
一对多查询
阅读权限70
在线时间 小时
附件的文件有宏病毒,直接被我的杀软干掉了。。。没打开~{:soso_e101:}
阅读权限20
在线时间 小时
gufengaoyue 发表于
附件的文件有宏病毒,直接被我的杀软干掉了。。。没打开~
啊,不会吧,我杀毒软件没报啊,我这个也是手工输入,里面也没宏,我下载个宏病毒专杀的软件试试。
阅读权限95
在线时间 小时
请测试:Sub Macro1()
& & Dim cnn As Object, SQL$
& & Set cnn = CreateObject(&adodb.connection&)
& & cnn.Open &provider=microsoft.jet.oledb.4.0;extended properties=Excel 8.0;data source=& & ThisWorkbook.FullName
& & SQL = &select a.客号,b.报价单,b.物料 from [表1$] a left join [表2$] b on a.客号=b.客号&
& & [a2].CopyFromRecordset cnn.Execute(SQL)
& & cnn.Close
& & Set cnn = Nothing
End Sub
复制代码
阅读权限95
在线时间 小时
(11.48 KB, 下载次数: 7)
13:02 上传
点击文件名下载附件
阅读权限20
在线时间 小时
zhaogang1960 发表于
我之前的附件有点问题,表1中的客号是没用重复的,表2中才有重复。现在重新上传。这代码是可以决解问题,但我想需要的效果是:
客号& && && && && && && && &&&报价单& && & 物料
7406OBB01254& && &&&103729& && &&&F3FR3301
& && && && && && && && && && && &104497& && &&&F6FR3303
7392LNG09056& && &&&103776& && &&&F3FR3301
& && && && && && && && && && && &104497& && &&&F6FR3304
7389LMG08055& && &&&103776& && &&&F3FR3301
客号中,重复的,就不需要将客号写入,只写入报价单和物料数值。
阅读权限95
在线时间 小时
hyzhangyong 发表于
我之前的附件有点问题,表1中的客号是没用重复的,表2中才有重复。现在重新上传。这代码是可以决解问题, ...Sub Macro1()
& & Dim cnn As Object, SQL$, arr, brr(), i&, j&
& & Set cnn = CreateObject(&adodb.connection&)
& & cnn.Open &provider=microsoft.jet.oledb.4.0;extended properties=Excel 8.0;data source=& & ThisWorkbook.FullName
& & SQL = &select a.客号,b.报价单,b.物料 from [表1$] a left join [表2$] b on a.客号=b.客号&
& & arr = cnn.Execute(SQL).GetRows
& & ReDim brr(UBound(arr, 2), UBound(arr))
& & For i = 0 To UBound(arr, 2)
& && &&&If arr(0, i) && t Then
& && && && &brr(i, 0) = arr(0, i)
& && && && &t = arr(0, i)
& && &&&End If
& && &&&brr(i, 1) = arr(1, i)
& && &&&brr(i, 2) = arr(2, i)
& & Next
& & [a2].Resize(i, 3) = brr
& & cnn.Close
& & Set cnn = Nothing
End Sub
阅读权限95
在线时间 小时
(11.79 KB, 下载次数: 2)
15:43 上传
点击文件名下载附件
阅读权限20
在线时间 小时
zhaogang1960 发表于
{:soso_e183:}代码不错,非常感谢!但是我放在实际应用中却遇到一些问题:arr = cnn.Execute(SQL).GetRows取值不到,且如果第一列不是客户号,那么会把第一列就的数值覆盖掉。我现在上传实际表格,请再帮忙看一下如何处理。谢谢!!
(31.4 KB, 下载次数: 2)
16:27 上传
点击文件名下载附件
阅读权限95
在线时间 小时
& & & & & & & &
hyzhangyong 发表于
代码不错,非常感谢!但是我放在实际应用中却遇到一些问题:arr = cnn.Execute(SQL).Ge ...
为了不覆盖原数据,结果写到G列:Sub Macro1()
& & Dim cnn As Object, SQL$, arr, brr(), i&, j&
& & Set cnn = CreateObject(&adodb.connection&)
& & cnn.Open &provider=microsoft.jet.oledb.4.0;extended properties=Excel 8.0;data source=& & ThisWorkbook.FullName
& & SQL = &select a.售达方,b.报价单,b.物料 from [Feuil1$D3:F& & Range(&D65536&).End(xlUp).Row & &] a left join [Feuil2$] b on a.售达方=b.售达方&
& & arr = cnn.Execute(SQL).GetRows
& & ReDim brr(UBound(arr, 2), UBound(arr))
& & For i = 0 To UBound(arr, 2)
& && &&&If arr(0, i) && t Then
& && && && &brr(i, 0) = arr(0, i)
& && && && &t = arr(0, i)
& && &&&End If
& && &&&brr(i, 1) = arr(1, i)
& && &&&brr(i, 2) = arr(2, i)
& & Next
& & Columns(&H:J&).ClearContents
& & [h4].Resize(i, 3) = brr
& & cnn.Close
& & Set cnn = Nothing
End Sub
复制代码
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!
本站特聘法律顾问:徐怀玉律师 李志群律师
Powered by}

我要回帖

更多关于 多表查询 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信