I have three tables:
- Master Table A
| Key1 | Value1 |
|---|---|
| a | 1 |
| b | 2 |
| c | 3 |
| d | 4 |
| e | 5 |
| f | 6 |
- Table B
| Key1 | Value2 |
|---|---|
| b | x |
| c | y |
- Table C
| Key1 | Value2 |
|---|---|
| d | m |
| e | n |
Now I want to join A with B and C, in such a way that I get values from both B and C when the rows match but one row with Null if they do not match. Something like this:
| Key1 | Value1 | Value2 |
|---|---|---|
| a | 1 | NULL |
| b | 2 | x |
| c | 3 | y |
| d | 4 | m |
| e | 5 | n |
| f | 6 | NULL |
Now, one way to go halfway is to Left Join A with B and C, and then union the results, and then drop duplicates. However, this might result in the dropping of unwanted rows in a few cases too and is not optimal. What is the optimal way to achieve this?
CodePudding user response:
SELECT A.KEY1,A.VALUE1,X.VALUE2
FROM TABLEA AS A
LEFT JOIN
(
SELECT B.KEY1,B.VALUE2
FROM TABLEB AS B
UNION ALL
SELECT C.KEY1,C.VALUE2
FROM TABLEC AS C
)X ON A.KEY1=X.KEY1
If I understood your requirements correcly
