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