【问题标题】:how to print data from second table in MySQL如何从 MySQL 中的第二个表中打印数据
【发布时间】:2020-10-02 08:34:06
【问题描述】:

我有一个名为 companyNames 的主表,每一行都包含 公司名称, 例如。 TCS、TATAMOTORS、INFY 等,还有他们的表格,如 TCS 表格、INFY 表格等,所以我试图从这些表格中打印所有信息。但它没有打印..

 +------------+
| names      |
+------------+
| TCS        |
| INFY       |
| TATAMOTORS |
| TATASTEEL  |
+------------+
Company Name

+------------+---------+---------+---------+--------+---------+-----------+
| date       | high    | low     | open    | close  | volume  | adj_close |
+------------+---------+---------+---------+--------+---------+-----------+
| 2015-06-15 | 1260.22 |  1240.5 | 1252.65 | 1252.4 | 2525176 |   1098.59 |
| 2015-06-16 | 1259.65 | 1247.22 |    1250 |   1256 | 1267396 |   1101.74 |
| 2015-06-17 | 1264.57 |  1250.9 |  1260.5 | 1256.9 | 1975720 |   1102.53 |
+------------+---------+---------+---------+--------+---------+-----------+  
                               TCS

+------------+---------+---------+--------+--------+---------+-----------+
| date       | high    | low     | open   | close  | volume  | adj_close |
+------------+---------+---------+--------+--------+---------+-----------+
| 2018-07-15 |  720.22 |   120.5 |   1255 | 1252.4 | 2525176 |   1098.59 |
| 2017-03-11 | 1259.65 | 1247.22 |   12.5 |   1256 |    1267 |   1101.74 |
| 2014-01-14 | 1264.57 |  1250.9 | 1260.5 | 1256.9 | 1975720 |   1102.53 |
+------------+---------+---------+--------+--------+---------+-----------+ 
                                 INFY

之后

select * from (select names from companyNames) as a;

上面的查询只是打印公司的名称,而不是存储在 TCS、INFY 和其他表中的信息。

+------------+
| names      |
+------------+
| TCS        |
| INFY       |
| TATAMOTORS |
| TATASTEEL  |
+------------+

请帮我打印所有公司信息,也给我一些建议,使数据库更高效。

【问题讨论】:

    标签: mysql date join select subquery


    【解决方案1】:

    帮我打印所有公司信息

    您当前的架构很难完成原本看似简单的任务。您需要对公司名称进行硬编码,或者使用动态 SQL。第一个解决方案如下所示:

    select c.*, coalesce(t.high, i.high) high, coalesce(t.low, i.low) low, ...
    from companies c
    left join tcs  t on c.name = 'TCS'
    left join infy i on c.name = 'INFY'
    left join ...
    

    并给我一些建议,使数据库更高效

    不要使用单独的表来存储不同公司的数据。您应该只有一个表,其中一列引用companies 表的主键:

    表公司:

    company_id    company_name
    1             TCS
    2             INFY
    

    餐桌库存:

    company_id  date          high       low    ...
    1           2015-06-15    1260.22    1240.5
    1           2015-06-16    1259.65    1247.22
    2           2015-06-15     720.22     120.5
    2           2015-06-16    1259.65    1247.22
    

    然后,您可以将查询编写为简单的联接,而不管实际的公司名称如何:

    select c.company_name, s.*
    from companies c
    inner join stocks s on s.company_id = c.company_id
    

    【讨论】:

    • 如果我的主表包含 2k 个公司名称,并且每个公司表包含 1.5k 条记录该怎么办,如果我使用您的技术,它会有效吗?
    • @UbuntuTricks:是的,它会的,假设你有适当的外键和索引。另一方面,您的原始技术需要创建 2000 个相同的表,这是维护的噩梦,并且无法跨表查询。
    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 2021-04-04
    • 2023-01-22
    • 2018-01-28
    • 2020-02-25
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多