sql - 使用另一张表中的键将记录插入到一张表中
问题描述
我有一张桌子,上面有年份、开始和结束列,如下所示。它有好几年了。不要问我为什么有一年叫4,因为我不能告诉你。我只知道它不能从表中删除,否则 Web 应用程序将中断。
year start end
2019 2019-01-01 2019-12-31
4 2019-04-01 2020-03-31
我使用此查询将记录插入另一个表。
INSERT INTO table2 (id, other, medicaid, commercial, year)
SELECT id, other,
medicaid, commercial,
4 as year
FROM crosstab_table
如您所见, 4 在查询中是硬编码的。如何更改此查询以插入 table1 中所有年份的记录?例如,如何使用包含年份的表将下面的两个查询转换为一个查询。
INSERT INTO table2 (id, other, medicaid, commercial, year)
SELECT id, other,
medicaid, commercial,
4 as year
FROM crosstab_table;
INSERT INTO table2 (id, other, medicaid, commercial, year)
SELECT id, other,
medicaid, commercial,
2019 as year
FROM crosstab_table
解决方案
您可以使用CROSS JOIN
:
INSERT INTO table2 (id, other, medicaid, commercial, year)
SELECT
ct.id, ct.other, ct.medicaid, ct.commercial,
s.year
FROM crosstab_table ct
CROSS JOIN (
SELECT year FROM table1
) s;
推荐阅读
- haskell - 如何从 ByteString 中获取第 n 个字节?
- java - Java 8 读取文件列表,但文件在服务器冻结之前仍然打开使用资源
- tensorflow - 我怎么知道现在正在读取哪个 TFRecords 文件?
- sql-server - 在 SQL Server 中使用“@”拆分
- android - 如何在不丢失字体样式的情况下使用意图与其他应用程序共享可扩展字符串?
- php - 如何在数据库codeigniter中获取内部对象存储数据类型中的单个值作为json
- symfony - 奏鸣曲元素文本
- google-sheets - 如何在 Google Sheets Script 中放置不同长度的二维数组?
- c - 如何在数组的括号之间填充,我可以使用 strlen 吗?
- javascript - 使用 step() 在 $.animate 中不使用选择器停止所有其他动画?