以下是我的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)的所有条目。然后表格将被合并。 条件:
如果TABLE1和TABLE2中有匹配的日期,它们将被合并 如果TABLE1或TABLE2中有单独日期,则没有日期的表的值/文本将变为NULL 如果TABLE1或TABLE2中存在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/