我有一个数据集(示例 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粉2783794952023-09-10 09:53:30
错误很简单 - 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