MySQL將不同數據庫的兩個表合併為單個數據庫
朋友們,我有一個名為 DB1 的數據庫和一個名為 TB1A 的表,另一個數據庫名為 DB2 和一個表 TB2A。
TB1A 有 5 列,TB2A 有 8 列,TB1A 中可用的所有列都存在於 TB2A 中。
我想創建一個名為 TB3A 的新表,它應該是 TB1A 和 TB2A 的合併結果。表示 TB3A 將有 8 列,包含 TB1A 和 TB2A 的所有數據。
CREATE TABLE TB3A AS ( SELECT * FROM DB1.TB1A JOIN DB2.TB2A )
當我像上面那樣嘗試時,它顯示如下錯誤
錯誤程式碼:1060
重複的列名稱“Agreement_Id”
執行時間:0秒
傳輸時間:0秒
總時間 : 0 秒
有沒有人對此有任何想法。我已經用Google搜尋了這個問題,但我無法找到解決方案..
您輸入的內容相當於:
CREATE TABLE TB3A AS ( SELECT a.AgreementID, a.Column2, a.Column3, a.Column4, a.Column5, b.AgreementID, b.Column2, b.Column3, b.Column4, b.Column5, b.Column6, b.Column7, b.Column8 FROM TB1A a JOIN TB2A b );
您將有 13 列,只有 8 個不同的名稱。這是個問題。
您可能想要做的是:
CREATE TABLE TB3A AS ( SELECT AgreementID, Column2, Column3, Column4, Column5, Column6, Column7, Column8 FROM TB2A ); INSERT INTO TB3A (AgreementID, Column2, Column3, Column4, Column5) SELECT * FROM TB1A;
TB3A
現在將有m + n行,其中m是 中的行數TB1A
,n是 中的行數TB2A
。
TB1A
如果和中的某些行TB2A
是重複的,則不會刪除這些行。您可以更改INSERT ... SELECT
語句以過濾掉TB1A
已經在TB3A
(因此,最初來自TB2A
)中的匹配行,在您需要的任何列中具有匹配值。例如,要不從TB1A
中引入與已經在 中的行相同AgreementId
的行TB3A
,INSERT
則應為:INSERT INTO TB3A (AgreementID, Column2, Column3, Column4, Column5) SELECT * FROM TB1A WHERE NOT EXISTS (SELECT 1 FROM TB3A WHERE TB1A.AgreementID = TB3A.AgreementId ) ;
對原始語句的附加說明:
JOIN
通常假定為INNER JOIN
- 基於一個或多個條件匹配來自兩個表的行。例如,TB1A JOIN TB2A ON TB1A.AgreementId = TB2A.AgreementId
將返回來自TB1A
和TB2A
具有相同的行AgreementID
。不會返回帶有 not found in 的行,並且不會TB1A
返回AgreementID
帶有not found in的行。TB2A``TB2A``AgreementID
TB1A
如果 3 行
TB1A
具有相同的AgreementId
,2 行TB2A
具有相同的 ID,則這些行將在結果集中生成 6 行:TB1A TB2A x m y n z Result set: x,m x,n y,m y,n z,m z,n
在某些 SQL 方言(包括 MySQL)中,如果沒有
JOIN
指定條件,則. 在這裡,由於沒有指示哪些行不應連接在一起,因此所有行都連接在一起。如果在 中有m行,在 中有n行,則不會得到m+n行 - 你會得到mn*行。如果您的原始語句執行,那就會發生這種情況。INNER JOIN``CROSS JOIN``TB1A``TB2A
請嘗試提供別名或
db.table
如下所示。CREATE TABLE TB3A AS ( SELECT A.coli, A.col2, A.col3, A.col4, A.col5 FROM DB1.TB1A A JOIN DB2.TB2A B)