MySQL合并两个具有不同数据的表

标签 mysql join merge

以下是我的mysql表

表 1:

ID  | commonID | Date  | text | active
1     11         01.02   abc    1
2     11         02.02   123    1 
3     11         03.02   xyz    0

表 2:

ID  | commonID | Date  | value | active
1     11         01.02   abc    1
2     11         04.02   123    1 
3     11         03.02   xyz    1

最终结果应显示如下:

| date | text |   value
  01.02  abc      abc
  02.02  123      (null)
  03.02  (null)   xyz
  04.02  (null)   123

这里的想法是合并两个表。将从两个表中选择具有定义的 commonID​​(例如示例中的 11)的所有条目。然后表格将被合并。 条件:

如果TABLE1TABLE2中有匹配的日期,它们将被合并 如果TABLE1TABLE2中有单独日期,则没有日期的表的值/文本将变为NULL 如果TABLE1TABLE2中存在active = FALSE的记录,则不会对其进行处理。 两个表中都可以有匹配和不匹配的日期。

我想用它来显示按时间顺序排列的事件,如果两个表中都有一个事件,则应该只有一行。

这里的解决方案是什么?

最佳答案

试试这个:

SELECT T1.date,
       CASE WHEN T1.active = 1 THEN T1.text END as text,
       CASE WHEN T2.active =1 THEN T2.value END as value
FROM Table1 T1 LEFT JOIN
     Table2 T2 ON T1.date=T2.date
UNION
SELECT T2.date,
       CASE WHEN T1.active = 1 THEN T1.text END as test,
       CASE WHEN T2.active = 1 THEN T2.value END as value
FROM Table1 T1 RIGHT JOIN
     Table2 T2 ON T1.date=T2.date

结果:

DATE    TEXT    VALUE
01.02   abc     abc
02.02   123     (null)
03.02   (null)  xyz
04.02   (null)  123

样本SQL Fiddle .

关于MySQL合并两个具有不同数据的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28692886/

相关文章:

python - 将列表项与上一个列表项合并

mysql - 良好的数据库要求

php - 过程 mysql 没有按预期工作

arrays - 如何在 Swift 中连接或合并数组?

Mysql:如何获取具有累积和的时间片查询(意外结果)

mysql - 'F_ID' 中的未知列 'on clause'

python - Pandas 在连接字符串时合并结果丢失的行

mysql - 加载 XML 本地内文件 phpmyadmin 错误 #1064

python - 转义字符串 Python for MySQL

mysql - 在子查询中计算选票或使用连接 - 哪个更快?