I want to perform select query if else in innner join if IsStatus =0 then i want to inner join with T_valDob and show val column from that table. if IsStatus =1 then i want to inner join with T_valSob and show val column from that table. IsStatus is bit type.
T_MappingTable
| MappingID | valID | IsStatus |
|---|---|---|
| 0 | 1 | 0 |
| 1 | 2 | 0 |
| 2 | 3 | 0 |
| 3 | 4 | 0 |
| 4 | 5 | 0 |
| 5 | 1 | 1 |
| 6 | 2 | 1 |
| 7 | 3 | 1 |
| 8 | 4 | 1 |
| 9 | 5 | 1 |
| 10 | 6 | 1 |
T_valDob
| valID | val |
|---|---|
| 1 | val1 |
| 2 | val2 |
| 3 | val3 |
| 4 | val4 |
| 5 | val5 |
| 6 | val6 |
| 7 | val7 |
| 8 | val8 |
T_valSob
| valID | val |
|---|---|
| 1 | valSop1 |
| 2 | valSop2 |
| 3 | valSop3 |
| 4 | valSop4 |
| 5 | valSop5 |
| 6 | valSop6 |
| 7 | valSop7 |
| 8 | valSop8 |
Like i want final output like this in single resultset
| MappingID | valID | IsStatus | val |
|---|---|---|---|
| 0 | 1 | 0 | val1 |
| 1 | 2 | 0 | val2 |
| 2 | 3 | 0 | val3 |
| 3 | 4 | 0 | val4 |
| 4 | 5 | 0 | val5 |
| 5 | 1 | 1 | valSop1 |
| 6 | 2 | 1 | valSop2 |
| 7 | 3 | 1 | valSop3 |
| 8 | 4 | 1 | valSop4 |
| 9 | 5 | 1 | valSop5 |
| 10 | 6 | 1 | valSop6 |
CodePudding user response:
I would think you probably want to do a UNION query, such as:
SELECT MT.MappingID, MT.valID,MT.IsStatus, TD.val
FROM T_MappingTable MT
INNER JOIN T_valDob TD on MT.valID = TD.valID
WHERE MT.IsStatus = 0
UNION ALL
SELECT MT.MappingID, MT.valID,MT.IsStatus, TS.val
FROM T_MappingTable MT
INNER JOIN T_valSob TS on MT.valID = TS.valID
WHERE MT.IsStatus = 1
CodePudding user response:
I don't think that this can be done with two INNER joins because no row from T_MappingTable can have both IsStatus = 0 and 1.
I think you want two LEFT joins with a CASE as part of your SELECT something like this:
SELECT TMap.MappingID,
TMap.valID,
TMap.IsStatus,
CASE WHEN TMap.IsStatus = 0 THEN TDob.val ELSE TSob.val END AS val
FROM T_MappingTable AS TMap
LEFT JOIN T_valDob AS TDob ON TMap.valID = TDob.valID AND TMap.IsStatus = 0
LEFT JOIN T_valSob AS TSob ON TMap.valID = TSob.valID AND TMap.IsStatus = 1;
