MySQL 查询基于两个 table 创建一个新的 table

MySQL query to create a new table based on two tables

primary_table:

name_column | description_column
--------------------------------
John        | asb
Marta       | oikjew89
Steve       | fr23

secondary_table:

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 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 中不满足(例如- 史蒂夫)。

根据选择,应该创建 result_table。

就两个 table 都有大量数据(数千行)而言,name_column 在两个 table 中都有索引,因此查询执行不会花费数小时。 名字和姓氏只是一个例子。实际数据和人绝对不一样

谢谢。

你应该看看LEFT OUTER JOIN概念。它将为您提供主要 table 中的所有行和次要 table 中的任何匹配行。当没有匹配数据时,对于引用secondary table的查询列将报告NULL(即如果secondary table中没有条目,lastname_column将为null)。

此外,根据上述查询

的结果,新的table创建应该很简单

根据您的示例,查询应如下所示

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

如果您打算创建新的 table,那么您需要读取两个 table 的整个模式并使用模式重新创建新的 table 并从两个 table秒。

有没有简单的方法来查询它而不实际创建新的 table 更简单。

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 

您可以通过在查询中使用左连接来获得所需的结果...

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

以下是如何根据 select 语句创建 result_table

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 |
+-------------+--------------------+-----------------+------------+