2010-05-09 82 views
-1

我有兩個表加入與列加入空(比如emp_id)..如果emp_id在這兩個表中有NULL值,怎麼會SQL服務器甲骨文治療? ?在SQL Server,Oracle和Informatica的

堂妹,我讀到,當joining..if我處理空,Informatica的將忽略空行代-1,一個交叉聯接會發生,我不想..

我能在這裏做什麼?

我不能完全忽略有NULL的行。

謝謝

+0

你想用NULL值做什麼? – 2010-05-09 17:22:43

+0

只有id列有NULLs ..所有其他列都有值,我想要它們 – jest 2010-05-09 17:25:30

+0

是的,但你加入了什麼?如果沒有,請參閱下面的答案。 – 2010-05-09 17:31:12

回答

1

你不能加入colA = colB,並期望NULL比較等於。根據您的需求(也許假設某種表同步的需要下文)三種方法我能想到的是

  1. 使用COALESCE到位空的替代這樣一個值-1,如果存在一個合適的值,它永遠不能發生在您的實際數據中。 COALESCE(Table1.colA,-1) = COALESCE(Table2.colB,-1)
  2. 在所有連接的列上使用IS NULL和相等性檢查。
  3. 使用INTERSECT(空值將被視爲相等)。可能在派生表中,您可以重新加入。
+0

如果我替換-1會發生交叉連接嗎? – jest 2010-05-09 17:23:45

+0

不,但效率很低,所以可能不適合大量的行。你能澄清你的情況爲什麼你需要這樣做嗎?我假設你將在你的連接中有一些非空的列。例如同步表的2個副本。如果不是這種情況,你會得到一個交叉連接是的。 – 2010-05-09 17:28:44

+0

我還沒有面對這樣的現實世界的情況..只是有疑問..所以,如果ID列的空值,你會做什麼? – jest 2010-05-09 17:30:55