Mam trzy stoły.
.. Chcę wstawić poniższą wartość do tabeli3.stat za pomocą "One" stwierdzenie SQL.
1. Wybierz status z tabeli0, Tabela2, gdzie Table0.Serial = Tabela2.num
2. Wybierz stan z tabeli1, tabela2, gdzie tabela1.id = Tabela2.num
Czy to możliwe w 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  |
0
finkfink 26 luty 2019, 19:59

2 odpowiedzi

Najlepsza odpowiedź

SQL Demo

Użyj UNION ALL Nawet gdy są dwa wybrane, to tylko jedno stwierdzenie

INSERT INTO table3 ("num", "stat")
select table2."num", table0."status" 
from table0
JOIN table2 ON table0."serial"=table2."num"

UNION ALL

select table2."num", table1."condition" 
from table1
JOIN table2 ON table1."ID"=table2."num"

; 
0
Juan Carlos Oropeza 27 luty 2019, 14:09

Wygląda na to, że szukasz zapytania jako

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

Lub jeśli kolumna nie zawsze się dopasowuje, możesz użyć lewego dołączenia (zgodnie z sugestią Juana Carlosa 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

Aktualizacja

Związane z twoim komentarzem

W przypadku wewnętrznego dołączenia nie masz prawidłowej wartości w Tabeli1

Na podstawie skrzypek
możliwe

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.

0
scaisEdge 27 luty 2019, 09:22