Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当其中一列为NULL/空白时,SQL与两列联接_Sql_Sql Server - Fatal编程技术网

当其中一列为NULL/空白时,SQL与两列联接

当其中一列为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

假设我有两张这样的桌子:

我想为Col2和Col3列加入#tmp1和#tmp2。但是,如果这些列中的任何一列的值为空或Null,我想忽略该列,只查看其中一列。 举个例子,当我加入Col2是ABC时,我应该得到Col3的DEF和Blank


我希望我在这里说得有道理。如果不够清楚,请道歉。

我无法从您的示例中判断您想要加入哪些列,但为了解决“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列