当其中一列为NULL/空白时,SQL与两列联接
假设我有两张这样的桌子: 我想为Col2和Col3列加入#tmp1和#tmp2。但是,如果这些列中的任何一列的值为空或Null,我想忽略该列,只查看其中一列。 举个例子,当我加入Col2是ABC时,我应该得到Col3的DEF和Blank当其中一列为NULL/空白时,SQL与两列联接,sql,sql-server,Sql,Sql Server,假设我有两张这样的桌子: 我想为Col2和Col3列加入#tmp1和#tmp2。但是,如果这些列中的任何一列的值为空或Null,我想忽略该列,只查看其中一列。 举个例子,当我加入Col2是ABC时,我应该得到Col3的DEF和Blank 我希望我在这里说得有道理。如果不够清楚,请道歉。我无法从您的示例中判断您想要加入哪些列,但为了解决“null”问题,您可以这样做 SELECT * FROM T1 JOIN T2 ON COALESCE(T1.COL1,T2.COL1) = T2.COL1
我希望我在这里说得有道理。如果不够清楚,请道歉。我无法从您的示例中判断您想要加入哪些列,但为了解决“null”问题,您可以这样做
SELECT *
FROM T1
JOIN T2 ON COALESCE(T1.COL1,T2.COL1) = T2.COL1
AND COALESCE(T1.COL2,T2.COL2) = T2.COL2
如果T1.COL1或T1.COL2为空,它将使用它要连接到的表的值。这允许null作为“通配符”
或者如果T2是带有空值的表
SELECT *
FROM T1
JOIN T2 ON T1.COL1 = COALESCE(T2.COL1,T1.COL1)
AND T1.COL2 = COALESCE(T2.COL2,T1.COL2)
如果两列中至少有一列是相同的,则可以使用
union
进行此检查,使用存在:
select col1, col2, col3
from tmp1 t1
where exists (select 1
from tmp2 t2
where t1.col2 = t2.col2 or t1.col3 = t2.col3)
union
select col1, col2, col3
from tmp2 t2
where exists (select 1
from tmp1 t1
where t1.col2 = t2.col2 or t1.col3 = t2.col3)
结果:
| col1 | col2 | col3 |
|-------|------|------|
| test1 | abc | def |
| test2 | aaa | bbb |
| test1 | abc | |
| test2 | ccc | bbb |
我不确定我在听。你能分享你对这个样本数据集的期望结果吗?@Mureinik:好的,那么当我加入Col2和Col3的#tmp1和#tmp2时,我想:“Test1”、“ABC”、“DEF”、“Test1”、“ABC”、“Test2”、“AAA”、“BBB”、“Test2”、“CCC”、“BBB”
加入这些表的条件是什么。是交叉连接吗?@navigator:我也不确定。。。我想任何有效的联接。@sgedes:4个结果和3列