Mysql

MySQL將不同數據庫的兩個表合併為單個數據庫

  • July 27, 2017

朋友們,我有一個名為 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是 中的行數TB1An是 中的行數TB2A

TB1A如果和中的某些行TB2A是重複的,則不會刪除這些行。您可以更改INSERT ... SELECT語句以過濾掉TB1A已經在TB3A(因此,最初來自TB2A)中的匹配行,在您需要的任何列中具有匹配值。例如,要不從TB1A中引入與已經在 中的行相同AgreementId的行TB3AINSERT則應為:

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將返回來自TB1ATB2A具有相同的行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)

引用自:https://dba.stackexchange.com/questions/181957