sql - 如何从两个表的两个不同列中插入一列?
问题描述
我得到了三张桌子。
我想用“一个”sql语句将下面的值插入table3.stat。
1.select status from table0, table2 where table0.serial=table2.num 2.select
condition from table1, table2 where table1.ID=table2.num
postgresql 可以吗?
table0:
| serial | status | |
|--------|--------|---|
| a22 | good | |
| a33 | bad | |
| a11 | bad | |
table1:
| ID | condition | |
|-----|-----------|---|
| a00 | awesome | |
| a44 | bad | |
| a11 | bad | |
table2:
| num | | |
|------|---|---|
| a00 | | |
| a44 | | |
| a22 | | |
| a33 | | |
table3:
| num | stat |
|-----|------|
| | |
| - | - |
desired result:
| num | stat |
|-----|-------|
| a22 | good |
| a33 | bad |
| a00 |awesome|
| a44 | bad |
解决方案
似乎您正在寻找一个查询
select table2.num, table0.status
from table0
INNER JOIN table2 ON table0.serial=table2.num
INNER JOIN table1 ON table1.ID=table2.num
insert into table3 (num, stat)
select table2.num, table0.status
from table0
INNER JOIN table2 ON table0.serial=table2.num
INNER JOIN table1 ON table1.ID=table2.num
或者如果列不总是匹配,您可以使用左连接(如 Juan Carlos Oropeza 所建议)
select table2.num, table0.status
from table0
LEFT JOIN table2 ON table0.serial=table2.num
LEFT JOIN table1 ON table1.ID=table2.num
insert into table3 (num, stat)
select table2.num, table0.status
from table0
LEFT JOIN table2 ON table0.serial=table2.num
LEFT JOIN table1 ON table1.ID=table2.num
更新
与您的评论有关
对于内连接,您在 table1 中没有有效值 .. 所以这不会返回任何结果 .. 对于左连接 .. 左连接也返回值,当不匹配时,您也有空值 .. 唯一有效的条件
根据你的小提琴
可能是
select table2."num", table0."status"
from table0
INNER JOIN table2 ON table0."serial"=table2."num"
LEFT JOIN table1 ON table1."ID"=table2."num";
推荐阅读
- c# - 通过特定时间检查字符串值
- python - 如何更改列表中的元素位置
- go - 通过 ssh 在 64 位主机上构建 32 位:对象为 386,预期为 amd64
- php - 我需要将额外的值推送到会话中
- elasticsearch - ElasticSearch 中的 TRIM() 函数
- javascript - PHP文件树显示树首先展开然后折叠并导致初始页面加载时闪烁
- javascript - 如何将客户端日期时间存储在数据库中以与nodejs中的服务器时区匹配
- scala - 设置一个 scala.js 交叉编译库
- python-3.x - 得到崩溃响应,中止陷阱:6,当我尝试 pyvisa
- c# - 从 2 种格式解析 DayTime