首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我如何连接这些表?

我如何连接这些表?
EN

Stack Overflow用户
提问于 2011-12-19 06:50:09
回答 4查看 84关注 0票数 0

我有许多设备在不同的时间记录不同的数据,并希望在单个查询中获得所有数据,按时间排序。下面是我所拥有的各种表的一个示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE location(
    device_id INT, -- REFERENCES device(id)
    timestamp DATETIME2 NOT NULL,
    position GEOMETRY NOT NULL
)

CREATE TABLE temperature(
    device_id INT, -- REFERENCES device(id)
    timestamp DATETIME2 NOT NULL,
    temp FLOAT NOT NULL
)

我希望有一个单独的查询来连接device_id和时间戳上的表,当时间戳不匹配时,该查询包含空值。我正在寻找的输出格式的一个示例是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
device_id, timestamp, location, temperature
1, 2011/12/1 10:00:00, (35.1, 139.2), NULL
1, 2011/12/1 10:00:01, NULL, 9.0
1, 2011/12/1 10:00:02, (35.1, 139.2), 9.1

我尝试过执行完全连接,但是不知道如何在没有大型CASE语句的情况下执行timestamp列(请记住,虽然我只显示了两个表,但这个表可以有更多)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    location.device_id, 
    CASE WHEN location.timestamp IS NOT NULL THEN
        location.timestamp
    ELSE 
        temperature.timestamp 
    END as timestamp, 
    location,
    temp
FROM
    location 
    FULL JOIN temperature ON location.device_id = temperature.device_id 
        AND location.timestamp = temperature.timestamp
ORDER BY
    timestamp

有没有一种更简单的方法来编写这种查询?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-19 06:54:43

您可以使用COALESCE表达式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    location.device_id, 
    COALESCE(location.timestamp, temperature.timestamp) as timestamp, 
    position,
    temp
FROM
    location 
    FULL JOIN temperature ON location.device_id = temperature.device_id 
        AND location.timestamp = temperature.timestamp
ORDER BY
    timestamp;
票数 5
EN

Stack Overflow用户

发布于 2011-12-19 06:56:48

可以,您可以使用温度表的外部连接。这将在温度表中没有匹配行的情况下返回空值。

票数 0
EN

Stack Overflow用户

发布于 2011-12-19 07:01:30

您需要一个COALESCE来获取设备id/时间戳,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT
    COALESCE(l.device_id, t.device_id) as device_id,
    COALESCE(l.timestamp, t.timestamp) as timestamp,
    l.position as location,
    t.temp as temperature
FROM location l
FULL JOIN temperature t ON l.device_id = t.device_id 
    AND l.timestamp = t.timestamp
ORDER BY 2

还要注意,通过使用非常短的名称(l和t)为表添加别名,提高了可读性。

您可能希望检查您的订购-也许您想要ORDER BY 1, 2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8558019

复制
相关文章
十三、表连接
表连接(JOIN)是在多个表中间通过一定的连接条件,使表之间发生关联进而能从多个表之间获取数据。简单的表连接语法如下:
喵叔
2021/06/25
8570
十三、表连接
Oracle表连接
  内连接:查询满足条件的结果集,是相对于外连接来说的(条件的话由很多种可以等于、不等于、大于、小于等等)。
翎野君
2023/05/12
7310
如何使用python连接MySQL表的列值?
MySQL 是一个开源关系数据库管理系统,广泛用于存储、管理和组织数据。使用 MySQL 表时,通常需要将多个列值组合成一个字符串以进行报告和分析。Python是一种高级编程语言,提供了多个库,可以连接到MySQL数据库和执行SQL查询。
很酷的站长
2023/08/11
3080
如何使用python连接MySQL表的列值?
面试之前,MySQL表连接必须过关!——表连接的原理
我们知道,所谓表连接就是把各个表中的记录都取出来进行依次匹配,最后把匹配组合的记录一起发送给客户端。比如下面把t1表和t2表连接起来的过程如下图
砖业洋__
2023/05/06
2K0
面试之前,MySQL表连接必须过关!——表连接的原理
连表查询的介绍_连接表
大家好,又见面了,我是你们的朋友全栈君。 1、连表查询的原因 (1)如果查询结果不在一个表中,在多个表中,那就需要将表关联,进行连表查询。 (2)连表查询大多数都作用在外键得基础上。—表与表之间有关
全栈程序员站长
2022/10/05
3.1K0
连表查询的介绍_连接表
MySQL之表连接
当需要同时显示多个表的字段时,就可以用表连接来实现这样的功能。从大类上分,表连接可分为内连接和外连接,它们之间的最主要区别是,内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。
秋白
2019/02/21
2K0
MySQL之表连接
【MySql】表的内连接和外连接
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
平凡的人1
2023/10/15
2960
【MySql】表的内连接和外连接
简单备份wordpress连接表
用过 wordpress 的朋友都知道,WordPress 可以导出 WordPress eXtended RSS 或 WXR 文件,它包含了您的全部文章、页面、评论、自定义域、分类目录和标签。我们可以在再次安装 WordPress 时导入它。那么WordPress 的链接表怎么备份呢?
空空裤兜
2023/03/03
6870
MySQL表的内外连接
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。而使用where进行笛卡尔积筛选的时候,后面必须跟着一个过滤条件,将不合理的数据筛选掉,并且这时候再跟着其他条件就需要and其他条件,所以这种方式的内连接虽然可以,但是容易将内连接的条件与其他约束条件混淆,不容易区分。
每天都要进步呀
2023/10/16
2160
MySQL表的内外连接
SQL三表连接查询
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135565.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/18
2.1K0
MySQL | 表的内连接
数据操作语言:表连接查询(一) 从多张表中提取数据 从多张表提取数据,必须指定关联的条件。如果不定义关联条件就会出现无条件连接,两张表的数据会交叉连接,产生 笛卡尔积。 规定了连接条件的表连接语句,就不会出现笛卡尔积。 # 查询每名员工的部门信息 SELECT e.empno,e.ename,d.dname FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno; 表连接的分类 表连接分为两种:内连接 和 外连接 内连接是结果集中只保留符合连接条件的记录 外
Zkeq
2022/05/18
3.4K0
MySQL | 表的内连接
关于哈希表,你该了解这些!
首先什么是 哈希表,哈希表(英文名字为Hash table,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hash table就可以了)。
代码随想录
2020/07/13
5830
学习日志——SQL几种表连接和连接效率
最近在进行一个数据展示的项目,问题是公司目前的情况是采集到了数据,将数据存入到了一个数据中心,然后就没有任何操作了。也就是说要从原始数据当中查询数据进行数据展示,这是一个很难受的过程,但是又是一个要必然经历的过程,因为原始数据来了之后,必然要通过实际的业务来检验数据的正确性,有效性和质量,然后就对应的业务数据进行清洗,提取存入业务库,方便以后的操作。然后后端代码基本上没怎么写,全部都思考查询sql应该怎么写了。
海加尔金鹰
2020/06/09
2.2K0
Oracle数据库 表连接与表设计
select deptno,e.ename,d.dname from emp e natural join dept d;
wolf
2020/09/21
2.2K0
Oracle表连接学习笔记
内连接:指表连接的结果只包含那些完全满足连接条件的记录。下面学习一下内连接的,给个例子,这里创建两张表,然后用内连接方式查询,看看例子:
SmileNicky
2019/06/25
9200
如何制作bom表_如何制作bom表
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/175678.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
3K0
树状数据库表查询2次以上(自连接、内连接、别名、邻接表)方法
https://www.cnblogs.com/kissdodog/p/3297894.html——这个讲清楚了。
hotqin888
2022/05/07
4530
执行计划之表连接1:连接树(Join Trees)
阅读官方在线文档无疑是学习Oracle最好的方法,本文参考在线文档介绍表连接以及连接树(Join Trees)。
SQLplusDB
2022/08/19
6550
执行计划之表连接1:连接树(Join Trees)
SAS中哈希表的连接问题
哈希表即散列表(Hash table),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。在SAS中使用哈希表十分简单,你并不需要知道SAS内部是怎么实现的,只需要知道哈希表是存储在内存中的,查找是根据key值直接获得存储的地址的精确匹配。加上使用哈希表合并数据集时不用排序的优点,在实际应用中可以极大的提高程序运行效率,尤其是数据集较大的时候。但是由于哈希表是放到内存中的,因此对内存有一定要求!
专业余码农
2020/07/15
2.4K0
点击加载更多

相似问题

当键是数字时,python字典

10

混合字典排序和数字排序

11

当数字的数字分开时对它们进行排序

10

当数字被重复时,数据读取

21

仅当没有重复的数字时才打印数字

60
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文