gpt4 book ai didi

mysql - 合并来自 2 个表的数据,仅使用唯一行

转载 作者:行者123 更新时间:2023-11-29 03:02:04 25 4
gpt4 key购买 nike

我的数据库中有 2 个表

primary_id
primary_date
primary_measuredData

temporary_id
temporary_date
temporary_measuredData

嗯。该表还有其他列,但这些是重要的列。

我想要的是以下内容。

“主要”表由经过验证的测量数据组成。如果此处有可用数据,则输出应首先从主要中选择,如果主要中不可用,则从临时中选择。

在大约 99.99% 的情况下,所有旧数据都在主表中,只有最后一天来自临时表。

例子:

primary table:
2013-02-05; 345
2013-02-07; 123
2013-02-08; 3425
2013-02-09; 334

temporary table:
2013-02-06; 567
2013-02-07; 1345
2013-02-10; 31
2013-02-12; 33

我正在寻找输出的 SQL 查询:

2013-02-05; 345   (from primary)
2013-02-06; 567 (from temporary, no value available from prim)
2013-02-07; 123 (from primary, both prim & temp have this date so primary is used)
2013-02-08; 3425 (primary)
2013-02-09; 334 (primary)
2013-02-10; 31 (temp)
2013-02-12; 33 (temp)

您看,没有重复的日期,如果数据在主表中可用,则使用该表中的数据。

我不知道如何解决这个问题,所以我不能给你任何“这是我到目前为止所做的 :D”

谢谢!

编辑:“measuredData”的值可以不同于 temp 和 primary。这是因为 temp 用于存储临时值,稍后在验证数据时会进入主表。

编辑 2:我更改了主表并添加了一个新列“临时”。这样我就可以将所有数据存储在同一个表中。更新主要数据时,它会使用新数字更新临时数据。这样我就不需要将 2 个表合并为一个。

最佳答案

你应该从这样的 UNION QUERY 开始:

SELECT p.primary_date AS dt, p.primary_measuredData as measured
FROM
`primary` p
UNION ALL
SELECT t.temporary_date, t.temporary_measuredData
FROM
`temporary` t LEFT JOIN `primary` p
ON p.primary_date=t.temporary_date
WHERE p.primary_date IS NULL

没有匹配项的 LEFT JOIN (p.primary_date IS NULL) 将返回临时表中不存在于主表中的所有行。使用 UNION ALL,您可以返回第一个表中可用的所有行。

您可能希望将 ORDER BY 子句添加到整个查询。请看 fiddle here .

关于mysql - 合并来自 2 个表的数据,仅使用唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21901787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com