簡體   English   中英

如何合並這兩個 mysql 表?

[英]How to merge these two mysql tables?

表酮

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

表二

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;

但兩者都做同樣的事情(把一張桌子放在另一張桌子上),但我想合並它們。 那么我必須使用什么查詢? 我希望你明白這個問題...

連續嘗試這些查詢:

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 的一種解決方法。

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

我首先選擇了 tabletwo,因為它具有所需的所有鍵

當然,因為 tabletwo 擁有所有的鍵,所以這是完美的情況。

使用集合論,如果tableone的key和tabletwo的key的交集與tableone的所有key或者tabletwo的所有key不一樣,你怎么辦??? 做這個:

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 中的某些內容的任何行都會為來自 C 的缺少條目獲取 NULL 列。

C 中缺少 B 中的某些內容的任何行都會為 B 中缺少的條目獲取 NULL 列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM