I have two tables:
Table1
WIP1 | TimeStamp1 |
---|---|
1 | 2021-11-04 |
2 | 2021-11-04 |
3 | 2021-11-04 |
4 | 2021-11-04 |
And table 2
WIP2 | TIMESTAMP2 | Status2 |
---|---|---|
1 | 2021-11-04 | RECEIVED |
2 | 2021-11-04 | PENDING |
4 | 2021-11-04 | RECEIVED |
I want to write a SELECT
that display if the WIPS on table 1 already exists on table 2, if not, display a respective message (keeping the Table 2 message, i.e. pending or received and adding a message 'Not Received' if the WIP doesn't exist on Table 2), so, with the columns from my example:
WIPR | TIMESTAMPR | Status |
---|---|---|
1 | 2021-11-04 | RECEIVED |
2 | 2021-11-04 | PENDING |
3 | 2021-11-04 | NOT RECEIVED |
4 | 2021-11-04 | RECEIVED |
Right now I've tried the following query:
select
t.WIP, t.TimeStamp, t.Operation
from
Table1 w
join
Table2 t on t.WIP = w.WIP
union
select
w.WIP, w.DateaReleased, 'Not Received' operation
from
Table1 w
left join
Table2 t on t.WIP = w.WIP
And it kind of works, but it duplicates the records:
CodePudding user response:
You can use left join
and case
, like below
select t1.wip1 as wipr, t2.TimeStamp2,
case when t2.wip2 is null then 'NOT RECEIVED' else t2.status2 end as status
from Table1 t1
left join Table2 t2 on t1.wip1 = t2.wip2
CodePudding user response:
Just an alternative to @Farshid Shekari 's answer.
You can also use Coalesce
:
select t1.wip1 as wipr
,t1.TimeStamp1 as timestampr
,coalesce(t2.status2, 'not received')
from Table1 t1
left join Table2 t2 on t1.wip1 = t2.wip2