2016-12-28 69 views
-2

primary_table創建新表MySQL查詢基於兩個表

name_column | lastname_column | dob_column 
------------------------------------------- 
Marta  | Doe    | 1970-09-02 
Steve  | Dobson   | 1968-04-01 
Marta  | Simpson   | 1952-10-08 
Michael  | Stone   | 1963-02-22 

的查詢執行的結果是包含result_table表:

name_column | description_column| lastname_column | dob_column 
--------------------------------------------------------------- 
John  | asb    | NULL   | NULL 
Marta  | oikjew89   | Doe    | 1970-09-02 
Marta  | oikjew89   | Simpson   | 1952-10-08 
Steve  | fr23    | Dobson   | 1968-04-01 

這意味着result_table類似於primary_table但更寬且具有相等或更多的行數。它可能會獲得更多的行,因爲name_column值可能會在secondary_table中出現超過1次(例如 - Marta)。

如果secondary_table中的name_column值在primary_table(例如 - Steve)中未得到滿足,則secondary_table中的name_column行不會影響任何內容。

根據選擇應該創建result_table。

就兩個表都有大量數據(數千行)而言,name_column在兩個表中都被索引,因此查詢執行不會花費數小時。名字和姓氏只是一個例子。實際的數據與人們完全不同。

謝謝。

+2

404!沒有人發現問題..沒人有足夠的時間爲你寫代碼.. – chhameed

+0

你不應該尋找創建一個新的表,而是爲了在表中插入一個選擇的結果 –

回答

2

下面介紹如何創建result_table基於select語句:

CREATE TABLE result_table AS 
SELECT p.name_column, p.description_column, s.lastname_column, s.dob_column 
FROM primary_table p 
LEFT JOIN secondary_table s ON p.name_column = s.name_column; 

隨後執行SELECT * FROM result_table ORDER BY name_column;將產生以下輸出:

+-------------+--------------------+-----------------+------------+ 
| name_column | description_column | lastname_column | dob_column | 
+-------------+--------------------+-----------------+------------+ 
| John  | asb    | NULL   | NULL  | 
| Marta  | oikjew89   | Doe    | 1970-09-02 | 
| Marta  | oikjew89   | Simpson   | 1952-10-08 | 
| Steve  | fr23    | Dobson   | 1968-04-01 | 
+-------------+--------------------+-----------------+------------+ 
0

您應該看看LEFT OUTER JOIN概念。它將爲您提供主表中的所有行以及次表中的所有匹配行。當沒有匹配的數據時,將針對引用輔助表的查詢列報告NULL(即,如果輔助表中沒有條目,則lastname_column將爲空)。

此外,基於上述查詢的結果,新創建表要簡單

根據你的榜樣,查詢應該像

select t1.name_column, t1.description, t2.lastname_column, t2.dob_column 
from primarytable t1 
left outer join secondarytable t2 on t1.name_column = t2.name_column 
0

如果你打算什麼是創建新表,那麼你需要讀取兩個表的全部模式,並使用模式重新創建新表並從兩個表中插入這些記錄。

有沒有簡單的方法來查詢它與實際創建新表,這是更簡單的。

SELECT 
pt.name_column, 
pt.description_column, 
st.lastname_column, 
st.dob_column 
FROM primary_table AS pt 
LEFT OUTER JOIN secondary_table AS st 
ON pt.column_name = st.column_name 
0

可以實現通過使用左連接查詢所需的結果...

SELECT A.name_column,A.description_column,B.lasname_column,B.dob_column 
from Primary_table A 
Left Join Secondary_table B 
ON A.name_column = B.name_column