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

我有一个数据集(示例 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

Karen Carpenter
Karen Carpenter

全部回复 (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
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!