已经遍布stackoverflow和谷歌已经接近,但还没有找到完整的解决方案......也许这是一个简单的解决方案,没有人需要在此之前寻求帮助?
我有2个课程表&课程相关信息(Master_Table& Import_Table)。 Master_Table表包含每个课程的核心内容/信息,但缺少日期&每周变化的时间(目前大约有240排核心课程)。请参阅下面的Master_Table结构:
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是2个表之间唯一的 ONLY 事物。虽然post_title将在Master_Table中显示一次,但它将在Import_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”out为OK。
如果可能的话,下面是两个可能的输出。选项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 |
+-----------+----------------+-------------------------------------+-------------------+------+
所以最后,我需要一种方法来执行以下操作(如果可能):
将两个表合并为一个并分配unique_id,以便我可以导出为CSV
以永不重复的方式分配unique_id代
结合所有start_dates& start_times到一行/单元格并用管道(|)分开,管道两侧没有空格
如果管道解决方案不是一个选项......上面的选项1也可以......
如果它有助于我使用MySQL
答案 0 :(得分:2)
尝试
SELECT * FROM Master_Table AS M
JOIN Import_Table AS I ON I.post_title = M.post_title
这将在他们的常用帖子标题上加入你的两个表格。您可以更改*以选择所需的列。
答案 1 :(得分:2)
您可以使用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;
由于日期/时间格式的问题,我说“类似”。您可能希望以不同方式格式化这些列。