mysql - 如何基于列合并两个表?

时间:2017-02-22 01:30:03

标签: mysql join merge

我有两个表,table1table2

table1
    id |    val    |
    a  |           |
    a  |           |
    b  |           |
    b  |           |

table2
    id |    val    |
    a  |    2      |
    a  |    3      |
    b  |    1      |
    b  |    0      |
    c  |    5      |        
    d  |    2      |        
    d  |    -2     |

我想根据val的值填充table1的{​​{1}}个值,以获得:

table2

我在做什么

table1
    id |    val    |
    a  |    2      |
    a  |    3      |
    b  |    1      |
    b  |    0      |

但我得到的是一个包含四列重复每个值两次的表格。

2 个答案:

答案 0 :(得分:1)

如果val可以为空:

SELECT DISTINCT tab1.id, ifnull(tab1.val, tab2.val) AS val
FROM tab1
JOIN tab2 ON tab1.id = tab2.id

如果val不为null:

SELECT DISTINCT tab1.id, if(tab1.val = '', tab2.val, tab1.val) AS val
FROM tab1
JOIN tab2 ON tab1.id = tab2.id

enter image description here

答案 1 :(得分:0)

这是对您的查询的唯一解释。我们可以保留table2的记录,具体取决于idtable1的{​​{1}}值是否存在:

SELECT t2.id, t2.val
FROM table2 t2
INNER JOIN
(
    SELECT DISTINCT id
    FROM table1
) t1
    ON t2.id = t1.id