如何在 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  |
+------------+

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

帮助我打印所有公司信息

您当前的架构使得很难实现看似简单的任务。您需要对公司名称进行硬编码,或使用动态 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

相关内容

最新更新