我有一個SELECT
聲明以及使用兩個表的join
。我們有表Shell
和表Tanker
。將列值複製到表的另一部分
它看起來像這樣select S.*, T.* from shell S left outer join tanker T on S.id = T.id
。 請注意,Tanker
有大約183個字段。
所以我得到以下數據
====Shell table==== =========Tanker table columsn======================
orgid org eli lang orgid org Lang {Other columns start}
906875 s 1 1 NULL NULL NULL NULL NULL NULL NULL
906876 s 2 2 NULL NULL NULL NULL NULL NULL NULL
906877 b 2 1 NULL NULL NULL NULL NULL NULL NULL
906878 s 1 1 NULL NULL NULL NULL NULL NULL NULL
906879 b 2 1 NULL NULL NULL NULL NULL NULL NULL
現在我要選擇ORGID,組織,郎,和其他183多個領域。所以現在我做 select T.* FROM ....
但這個問題是,當它選擇orgid
,org
,lang
和eli
它只獲得NULLS。這是有道理的,因爲我只選擇T.*
及其左連接,所以自然這些將爲空。
但是,爲了我的目的,我需要它們是shell表中的值。也就是說,我想從Shell選擇orgid,org,eli,lang,然後從Tanker中選擇其餘的。我知道一個辦法,我這樣做是以下
select s.orgid, s.org, s.eli, s.lang, t.column, t.column2, t.column3
回想起那有Tanker T
近200列。我不想在腳本上寫200列。
所以這裏是問題。
有什麼辦法可以將orgid,org,eli,lang的值(即實際非空值)「複製」到null列嗎?這樣我就可以做select T.*
並選擇所有200列。
所以真的,如果你感到困惑,我在尋找最終的結果是
====Shell table==== =========Tanker table columsn======================
orgid org eli lang orgid org Eli Lang {Other columns start}
906875 s 1 1 906875 s 1 1 NULL NULL
906876 s 2 2 906876 s 2 2 NULL NULL NULL
906877 b 2 1 906877 b 2 1 NULL NULL
906878 s 1 1 906878 s 1 1 NULL NULL NULL
906879 b 2 1 906879 b 2 1 NULL NULL NULL
我認爲唯一的方法就是動態sql。您使用的是什麼RDMS?你有什麼嘗試? – Arion
不幸的是,使用*排除列是不容易的。我會推薦的是創建一個視圖來實現這一點,這樣你就可以引用視圖,而不必擔心隨時需要重寫這種類型的腳本。 – SPFiredrake