I want to know How to left join when only matched one record from right table.
For example,
tableA
id | value |
---|---|
1 | 34 |
2 | 42 |
3 | 60 |
tableB
id | value | tableA_id |
---|---|---|
1 | 20 | 1 |
2 | 31 | 1 |
3 | 50 | 2 |
I want to get result like below using left outer join
.
tableA_id | tableA_value | tableB_value |
---|---|---|
1 | 34 | null |
2 | 42 | 50 |
3 | 60 | null |
tableB_value of first row is null, because tableA.id = tableB.tableA_id
matches multiple records.
how to solve it ? Thanks.
Advertisement
Answer
You can make use of COUNT()
as an analytic function to keep track of how many times a tableA_id
occurs in the A table:
SELECT a.id AS tableA_id, a.value AS tableA_value, b.value AS tableB_value FROM tableA a LEFT JOIN ( SELECT *, COUNT(*) OVER (PARTITION BY tableA_id) cnt FROM tableB ) b ON a.id = b.tableA_id AND b.cnt = 1 ORDER BY a.id;