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