SQL中连接不同数据类型字段:合并Table1与Table2得到Table3
现有表结构与数据
Table1
| ID | Name | Class | Date | Intime | INAM |
|---|---|---|---|---|---|
| 1001 | Smith | 1st | 09-12-2022 | 8:30 AM | P |
Intime字段数据类型:time(7)
Table2
| ID | Name | Class | Date | Intime | INAM |
|---|---|---|---|---|---|
| 1001 | Smith | 1st | 10-12-2022 | Absent | A |
Intime字段数据类型:varchar
目标结果(Table3)
| ID | Name | Class | Date | Intime | INAM |
|---|---|---|---|---|---|
| 1001 | Smith | 1st | 09-12-2022 | 8:30 AM | P |
| 1001 | Smith | 1st | 10-12-2022 | Absent | A |
解决方案
你需要的是合并两个表的记录而非关联连接,用UNION ALL即可实现,核心是统一两个表对应列的数据类型:
以SQL Server为例,将Table1的time(7)类型Intime转换为varchar,与Table2的字段类型匹配:
SELECT ID, Name, Class, Date, CONVERT(varchar, Intime) AS Intime, INAM FROM Table1 UNION ALL SELECT ID, Name, Class, Date, Intime, INAM FROM Table2
补充说明
UNION ALL会保留两个表的所有原始记录,效率比去重的UNION更高,符合你的目标结果需求;- 不同数据库的类型转换语法略有差异:MySQL用
CAST(Intime AS CHAR),Oracle用TO_CHAR(Intime),核心逻辑都是将时间类型转为字符串类型实现类型统一。
内容的提问来源于stack exchange,提问作者Smith
相关产品推荐
相关产品推荐

