【问题标题】:MySQL query to create a new table based on two tablesMySQL查询基于两个表创建一个新表
【发布时间】:2016-12-28 09:34:32
【问题描述】:

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表,其中包含:

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)。

如果在 primary_table 中不满足来自 secondary_table 的 name_column 值(例如 - Steve),则 secondary_table 中的 name_column 行不会影响任何内容。

应根据选择创建 result_table。

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

谢谢。

【问题讨论】:

  • 404!未找到问题..没有人有足够的时间为您编写代码..
  • 你不应该寻找创建一个新表,而是将选择的结果插入到一个表中

标签: mysql sql phpmyadmin create-table


【解决方案1】:

以下是基于 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 |
+-------------+--------------------+-----------------+------------+

【讨论】:

    【解决方案2】:

    如果您打算创建新表,那么您需要读取两个表的整个架构并使用架构重新创建新表并从两个表中插入这些记录。

    如何有简单的方法来查询它而不实际创建更简单的新表。

    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 
    

    【讨论】:

      【解决方案3】:

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

      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
      

      【讨论】:

        【解决方案4】:

        你应该看看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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-17
          • 1970-01-01
          • 2013-06-08
          • 2017-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-20
          相关资源
          最近更新 更多