如何通过不同列中可以为 NULL 的键将表连接到自身
P粉448346289
P粉448346289 2023-09-09 11:27:14
0
1
618

我有一个数据集(示例 5 个字段)如下。

开始日期 时间 数字1 数字2 键1 键2
2022年11月21日 0:01 1668969012 413027032418217 B3B820CE
2022年11月21日 0:02 B3B820CE
2022年11月21日 0:03 1668969013 413027032418218 8EFCB769
2022年11月21日 0:04 8EFCB769
2022年11月21日 0:05 1668969014 413027032418219 4070A788

正如您所看到的,前两行和后两行可以通过使用 key1 和 key2 中的字符串进行耦合。但对于最后一个字段,没有任何匹配字段。

基本上我需要匹配这些对并创建一个新表,如下所示。

开始日期 时间 结束日期 时间 数字1 数字2
2022年11月21日 0:01 2022年11月21日 0:02 1668969012 413027032418217
2022年11月21日 0:03 2022年11月21日 0:04 1668969013 413027032418218
2022年11月21日 0:05 1668969014 413027032418219

这是我到目前为止所尝试的。但这并没有提供我所需要的。有人可以告诉我这里的错误是什么吗?

SELECT 
    t1.start_date_time, t2.start_date_time AS end_date_time, t1.number1, t1.number2
FROM details_all AS t1
    JOIN details_all AS t2
      ON t1.key1 = t2.key2

P粉448346289
P粉448346289

全部回复(1)
P粉278379495

错误很简单 - INNER JOIN 将仅选择完整的对。

您必须在单独的子查询中收集所有键值,然后将数据加入其中。

SELECT t1.start_date_time,t2.start_date_time as end_date_time,t1.number1,t1.number2
FROM ( SELECT key1 AS key FROM table
       UNION                           -- combine columns values and remove duplicates
       SELECT key2 AS key FROM table
       ) all_keys
LEFT JOIN table t1 ON all_keys.key = t1.key1
LEFT JOIN table t2 ON all_keys.key = t2.key2

如果 key1 值始终存在,而 key2 中的相同值可能不存在,那么您可以使用简单的 LEFT JOIN:

SELECT t1.start_date_time,t2.start_date_time as end_date_time,t1.number1,t1.number2
FROM      table t1
LEFT JOIN table t2 ON t1.key1 = t2.key2
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板