提问者:小点点

如何在MySQL中从第二个表中打印数据


我有一个名为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  |
+------------+

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


共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