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