gpt4 book ai didi

mysql - 合并具有相同列的 2 个表

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

已经查看了 stackoverflow 和 Google 并且已经接近,但是还没有找到一个完整的解决方案......也许这是一个简单的解决方案,以前不需要任何人寻求帮助?

我有 2 个类(class)表和类(class)相关信息(Master_Table 和 Import_Table)。 Master_Table 表包含每门类(class)的核心内容/信息,但缺少日期和时间,因为这些每周更改一次(目前大约有 240 行核心类(class))。参见下面的 Master_Table 结构:

主表

+-----------+----------------+------------+------------+-------------------+------+
| sku_crmid | post_title | start_date | start_time | post_content | u_id |
+-----------+----------------+------------+------------+-------------------+------+
| skuid1 | Unique Title 1 | null | null | Unique Content 1 | null |
| skuid2 | Unique Title 2 | null | null | Unique Content 2 | null |
| skuid2 | Unique Title 3 | null | null | Unique Content 3 | null |
+-----------+----------------+------------+------------+-------------------+------+

Import_Table 每周更新一次,包含新的日期和时间(可能多达 2000 多行/导入)。它还包含 post_tile...post_title 是两个表之间唯一唯一的东西。虽然 post_title 将在 Master_Table 中显示一次,但它将在 Import_Table 中显示多次(每个新日期和时间一行)。请参阅下面的 Import_Table 结构:

导入表

+-----------+----------------+------------+------------+-------------------+------+
| sku_crmid | post_title | start_date | start_time | post_content | u_id |
+-----------+----------------+------------+------------+-------------------+------+
| null | Unique Title 1 | 12/02/2013 | 8:00am | null | null |
| null | Unique Title 1 | 12/16/2013 | 8:00am | null | null |
| null | Unique Title 2 | 12/09/2013 | 8:00am | null | null |
| null | Unique Title 2 | 12/16/2013 | 8:00am | null | null |
| null | Unique Title 3 | 12/02/2013 | 8:00am | null | null |
| null | Unique Title 3 | 12/09/2013 | 8:00am | null | null |
+-----------+----------------+------------+------------+-------------------+------+

我需要能够将 Master_Table 和 Import_Table 合并到一个表/输出中,我可以将其导出为 CSV。如果 Import_Table 中有“null”而 Master_Table 中有数据,我需要在输出中用数据替换“null”。如果同一列的两个表中都存在“null”,则“null”出局即可。

下面是 2 个可能的输出,如果它们可能的话也没有问题。选项 1 可以并且可以工作,但选项 2 更理想。我已经看到选项 2 通过在查询中插入 ', ' 来完成,但是管道是我需要的,'|' 两边都没有空格...

需要输出 - 选项 1

+-----------+----------------+------------+------------+-------------------+------+
| sku_crmid | post_title | start_date | start_time | post_content | u_id |
+-----------+----------------+------------+------------+-------------------+------+
| null | Unique Title 1 | 12/02/2013 | 8:00am | Unique Content 1 | id_1 |
| null | Unique Title 1 | 12/16/2013 | 8:00am | Unique Content 1 | id_2 |
| null | Unique Title 2 | 12/02/2013 | 8:00am | Unique Content 2 | id_3 |
| null | Unique Title 2 | 12/16/2013 | 8:00am | Unique Content 2 | id_4 |
| null | Unique Title 3 | 12/02/2013 | 8:00am | Unique Content 3 | id_5 |
| null | Unique Title 3 | 12/09/2013 | 8:00am | Unique Content 3 | id_6 |
+-----------+----------------+------------+------------+-------------------+------+

需要输出 - 选项 2(最佳解决方案)

+-----------+----------------+-------------------------------------+-------------------+------+
| sku_crmid | post_title | start_date_time | post_content | u_id |
+-----------+----------------+-------------------------------------+-------------------+------+
| skuid1 | Unique Title 1 | 12/02/2013 8:00am|12/16/2013 8:00am | Unique Content 1 | id_1 |
| skuid2 | Unique Title 2 | 12/09/2013 8:00am|12/16/2013 8:00am | Unique Content 2 | id_2 |
| skuid3 | Unique Title 3 | 12/02/2013 8:00am|12/09/2013 8:00am | Unique Content 3 | id_3 |
+-----------+----------------+-------------------------------------+-------------------+------+

所以最后,我需要一种方法来执行以下操作(如果可能的话):

  1. 将两个表合并为一个表并分配一个 unique_id,以便我可以导出为 CSV

  2. 以永不重复的方式分配一个unique_id生成

  3. 将所有 start_dates 和 start_times 合并到一个行/单元格中,并用竖线 (|) 分隔它们,竖线两边不要有空格

  4. 如果管道解决方案不是一个选项...上面的选项 1 也可以...

如果有帮助,我正在使用 MySQL

最佳答案

您可以使用 uuid() 函数分配一个唯一的键。或者,您必须使用变量,如以下示例所示。

查询的关键是将主表连接到输入表,然后将行聚合为一行。

你想要的查询是这样的:

select coalesce(it.sku_crmid, mt. sku_crmid) as sku_crmid,
mt.post_title,
group_concat(concat(it.start_date, it.start_time) separator '|') as start_date_time,
coalesce(it.post_content, mt.post_content) as post_content,
@rownum := @rownum + 1 as uid
from Master_table mt left outer join
Import_Table it
on it. post_title = mt. post_title cross join
(select @rownum := 0) const
group by post_title;

我说“类似”是因为日期/时间格式的问题。您可能希望以不同方式设置这些列的格式。

关于mysql - 合并具有相同列的 2 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20386965/

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