表1
Column1 Column2 Column 3
A Null 12
B Null 15
C 0 15
表2
Column2 Column3
0 15
0 12
我有表1和表2,这里我将表2参数传递给表1,表1应返回column1但它应该与Null值匹配,如下面的场景
如果我将(0,15)传递给表1,那么它应该返回' C'不是' B'。
如果我通过(0,12)到表1那么它应该返回' A'
任何时候它都应该返回一个值而不是多个值。
你能帮我解释一下这个逻辑吗?
答案 0 :(得分:0)
你可以做这个联盟:
select Column1 from
(
select Table1.Column1 as Column1,Table1.Column2 as Column2
from Table1
join Table2 on
Table1.Column2=Table2.Column2 and Table1.Column3=Table2.Column3
UNION
select Table1.Column1 as Column1,Table1.Column2 as Column2
from Table1
join Table2 on
Table1.Column2 is NULL and Table1.Column3=Table2.Column3
) as Unioned
ORDER BY Column2 NULLS LAST
LIMIT 1;
UNION会丢弃重复项,但如果您明确需要告诉它最多返回一个值,则可以将整个语句包装在另一个SELECT中。
答案 1 :(得分:0)
select *
from table2 t
left outer join table1 t1 on t.column2=t1.column2 and t.column3=t1.column3
left outer join table1 t2 on t2.column2 is null and t.column3=t2.column3
where t1.column2 is not null or t2.column3 is not null
答案 2 :(得分:0)
WITH T1
as
(SELECT COLUMN1,COLUMN2,
case when COLUMN2 is null then 0 else COLUMN2 end AS TRANSFORMED_COLUMN2,
row_number() OVER (partition by isnull(column3,2) ORDER BY isnull(COLUMN2,2) asc) AS rnk,
COLUMN3
FROM TABLE1)
SELECT
T1.COLUMN1,
T2.COLUMN2,
T2.COLUMN3
FROM
T1
INNER JOIN
(SELECT COLUMN2,COLUMN3 FROM TABLE2) T2
ON T1.TRANSFORMED_COLUMN2 = T2.COLUMN2
AND T1.COLUMN3=T2.COLUMN3
where T1.rnk=1
通过使用CTE,您将只运行一次表。
答案 3 :(得分:0)
SELECT t1.* FROM table1 t1
INNER JOIN table2 t2
ON NVL(t1.column2,0) = t2.column2 and t1.column3 = t2.column3