如何合并这两个mysql表?

时间:2011-07-22 20:29:39

标签: mysql merge phpmyadmin

tableone

a  |b| c
--------
a1 | |c1
a2 | |c2
a3 | |c3

tabletwo

a | b
-----
a1|b1
a2|b2
a3|b3
a4|b4
a5|b5

合并

a | b | c
a1| b1|c1
a2| b2|c2
a3| b3|c3
a4| b4|
a5| b5|

所以我有两个表,我想合并它们。我在phpmyadmin尝试了这两个选项:

INSERT IGNORE INTO tableone SELECT * FROM tabletwo;
REPLACE INTO tableone SELECT * FROM tabletwo;

但两者都是一样的(将一个表放在另一个表上),但我想合并它们。那么我必须使用什么查询?我希望你理解这个问题......

2 个答案:

答案 0 :(得分:3)

背靠背尝试这些查询:

INSERT IGNORE INTO tableone (a) SELECT a FROM tabletwo;

UPDATE tableone, tabletwo
SET tableone.b = tabletwo.b
WHERE tableone.a = tabletwo.a;

要回答pst,就像这样,假设tableone没有b列:

INSERT INTO tablethree (a, b, c)

SELECT * FROM ((
    SELECT
        tableone.a AS a,
        tabletwo.b AS b,
        tableone.c AS c

    FROM tableone

    LEFT OUTER JOIN tabletwo
    ON tableone.a = tabletwo.a
) UNION (
    SELECT
        tabletwo.a AS a,
        tabletwo.b AS b,
        tableone.c AS c

    FROM tableone

    RIGHT OUTER JOIN tabletwo
    ON tableone.a = tabletwo.a
)) AS x

这是未经测试的,但应该有效。 (“应该”......)UNION是MySQL缺乏FULL OUTER JOIN的一种解决方法。

答案 1 :(得分:1)

CREATE TABLE merged AS
SELECT A.a,A.b,B,B.c FROM
tabletwo A LEFT JOIN tableone USING (a);

我首先选择了tabletwo,因为它需要所有密钥

当然,由于平板电脑拥有所有按键,这就是完美的选择。

使用set theory,如果tableone的键与tabletwo的键的交叉点与tableone的所有键或tabletwo的所有键都不一样,你怎么办?这样做:

CREATE TABLE merged AS
SELECT
    A.a,B.b,C.c
FROM
(
    SELECT a FROM tableone
    UNION
    SELECT a FROM tabletwo
) A
LEFT JOIN tableone B USING (a)
LEFT JOIN tabletwo C USING (a);

内联SELECT A将所有合并的键作为集合UNION。

B中缺少某些东西的任何行都会从C中获取该缺失条目的NULL列。

C中缺少某些东西的任何行都会从B中获取该缺失条目的NULL列。

相关问题