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;
但两者都是一样的(将一个表放在另一个表上),但我想合并它们。那么我必须使用什么查询?我希望你理解这个问题......
答案 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列。