首页 > 解决方案 > 如何从两个表的两个不同列中插入一列?

问题描述

我得到了三张桌子。
我想用“一个”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  |

标签: sqlpostgresql

解决方案


似乎您正在寻找一个查询

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"; 

http://sqlfiddle.com/#!17/46bf1/22


推荐阅读