在OR条件中仅选择一个结果行

时间:2012-07-17 17:53:21

标签: sql

我有两个表,table1table2

table1中的数据可能类似于:

Col1     col2
----     ----
NULL     NULL 
ABCD     NULL
NULL     DEFG
ABCD     DEFG

现在有另一个表包含相同的两列,并包含任何这些数据的所有组合,例如(null, null)(null, defg)等。

我需要编写一个查询匹配行的查询。

注意:匹配期间应优先考虑column1

1 个答案:

答案 0 :(得分:1)

我认为你需要三个联接。您没有指定要执行的操作,因此以下查询仅指定匹配类型:

select table1.*,
       (case when fullmatch.col1 is not null and fullmatch.col2 is not null
             then 'FullMatch'
             when halfmatch1.col1 is not null
             then 'HalfMatch1'
             when halfmatch2.col2 is not null
             then 'HalfMatch2'
             else 'NoMatch'
        end) as MatchType
from table1 left outer join
     table2 fullmatch
     on table1.col1 = fullmatch.col1 and
        table1.col2 = fullmatch.col2 left outer join
     table2 halfmatch1
     on table1.col1 = halfmatch.col1 and
        halfmatch.col1 is null left outer join
     table2 halfmatch2
     on table1.col2 = halfmatch.col2 and
        halfmatch.col2 is null