Home > Net >  SQL JOINs with generic and specific mappings
SQL JOINs with generic and specific mappings

Time:02-26

From every row from the main table, I want to obtain the ColWanted value from the mapping table. For example, for the main table row with id 100 I should obtain 'one', for the id 101 I should obtain 'two', for the 102 'one', 103 'one', etc.

Is it possible?

Main table

PkId CAT UP
100 1 1
101 1 2
102 2 1
103 1 3

Mapping table

CAT UP ColWanted
1 null one
1 2 two
2 null one

CodePudding user response:

An empty string or NULL in the MappingTable is considered matching any value.

select m.PkId, p.ColWanted
from MainTable m
left join MappingTable p on (m.CAT = p.CAT or p.CAT is null or p.CAT ='' ) 
       and (m.UP = p.UP or p.UP is null or p.UP ='')

CodePudding user response:

Here's another solution:

SELECT m.PkId, p.ColWanted
FROM MainTable m
JOIN MappingTable p ON m.CAT = p.CAT AND m.UP = COALESCE(p.UP, m.UP)

Obvious m.UP = m.UP is guaranteed to be true. So when p.UP is NULL, the default is that the match is true.

  • Related