DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jsuguo
今日帖子: 27
在线用户: 24
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2021/9/18 16:31:53
标题:
请教一个数据库查询的问题 浏览:1559
加入我的收藏
楼主: 假如我有三张表:
Table Operator{ ID, Name}
Table Template{ID, Name}
Table Data{Time, Operator.ID,Template.ID, Result}
现在想基于Table Data查询出所有符合条件的(比如Time>xxxx)
Time, Result, Operator.Name,Template.Name,
该怎么写SQL语句呢?
看了一些联合查询的文档,还是一头的雾水
请大神指教
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2021/9/18 17:25:12
1楼: select a.time, a.result, b.name OperatorName, c.name TemplateName
from Data a, Operator b, Template c
where a.Operator.ID = b.id and a.Template.ID = c.id and
a.time > xxxx

不知道你什么库,大致就是这样,先看看效果。
我觉得其实可以调整一下的,这种教科书式的结构效率实在是太低,像这种单独一个id+name只用来做成数据字典单独用是没问题的,但是在业务数据里只存id每次都需要去关联获取name那就太不友好了,适当的增加一些冗余数据可以有效增加性能的。
----------------------------------------------
--
作者:
男 hardnut (麦轲数据管家) ★☆☆☆☆ -
普通会员
2021/9/18 17:59:22
2楼: select a.time, a.result, b.name OperatorName, c.name TemplateName
from Data a inner join  Operator b on a.Operator.ID = b.id 
  inner jon Template c on a.Template.ID = c.id
where a.time > xxxx

这是关系数据库最基本的操作啊
----------------------------------------------
UniKeeper V10.40 -- 您最贴心的个人数据管理助手
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2021/9/18 18:23:08
3楼: 感谢楼上两位的回复。我最开始的写法就是1楼的,似乎不大对,一会试试2楼的,原来inner join可以这么连着写 :)
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2021/9/19 10:34:44
4楼: 1,2楼的写法结果都一样,如果不行就都不行。应该是出了重复记录了。可以改成嵌套查询,不过那样效率会更低一些。
----------------------------------------------
--
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2021/9/19 10:45:06
4楼: maybe will be that?

select 
    c.id,
    c.operatorid,
    a.name,
    c.templateid,
    b.name,
    c."TIME",
    c.resulted
from tabledata c
   inner join operator a on (c.operatorid = a.id)
   inner join template b on (c.templateid = b.id)
order by c.operatorid, c.templateid


---> LEFT JOIN --> to TABLEDATA to be the "domain main" of query
All record from Operator AND Template "IF EXIST ON TableData"
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行39.0625毫秒 RSS