2008-12-04 12 views
1

我從1個表中選擇1個字段並將其存儲到臨時表中。簡單的SQL代碼逃避我..結合兩個不匹配的表

有時候這個表最後會有0行。

我想那個字段添加到擁有20多個領域

定期工會不會爲我工作,因爲該領域#不匹配的另一個表。 外面不會爲我工作,因爲沒有什麼可比較的。 NVL在第一個臨時表上不起作用。

任何人都知道該怎麼做?

更新:

我沒有提到....當檢索1場的表,發現在其他情況下比賽,這個代碼,我使用的是現在工程....

SELECT DISTINCT reqhead_rec.resp_name<br> 
FROM reqhead_rec, biglist<br> 
WHERE reqhead_rec.req_no = biglist.req_no 
AND reqhead_rec.frm = biglist.req_frm<br> 
INTO TEMP grabname with no log; 

SELECT biglist.*, grabname.resp_name<br> 
FROM biglist, grabname<br> 
ORDER BY prnt_item, account_amt<br> 
INTO TEMP xxx with no log; 
+0

什麼標準選擇是否將字段從第一個表中添加選擇nvl(NULL,NULL)到第二個表中的一行? – 2008-12-04 21:03:30

+0

第一張桌子有一堆關於郵政局的內容 第二張桌子只是從另一張桌子上找到兩個字段相匹配的名字 有時候郵政局沒有信息匹配 我可以只是默認情況下,行被找到? – CheeseConQueso 2008-12-04 21:15:28

回答

3

它會匹配什麼字段?順便說一句,這裏是如何將它們排隊:

SELECT NULL, NULL, NULL, NULL, MySingleField, NULL, NULL, NULL... FROM #temp 
UNION ALL 
SELECT Col1, Col2, Col3, Col4, Col5, Col6,... FROM OtherTable 

UPDATE:

OK,閱讀你的更新後...我不認爲你想有一個UNION可言,而是和非常簡單的子查詢

SELECT 
    *, 
    (SELECT TOP 1 Name FROM Blah WHERE Blah.SomeID = MyTable.SomeID) AS ExtraCol 
FROM 
    MyTable 
3

這聽起來像你想要一個連接,而不是一個工會。

你不需要比較任何東西來做一個連接。你結束了一個跨產品,如果你沒有指定連接條件:

SELECT t20.*, t1.* 
FROM table_with_20_columns AS t20 
    LEFT OUTER JOIN temp_table_with_1_column AS t1 ON (1=1); 

當有零行的臨時表,它會被報告爲在上面的查詢的結果爲NULL。

但是,如果臨時表中有多行,則會得到第一個表的交叉產品。我無法從你的問題中得知你想要什麼。

編輯:ONUSING條款中所表達的連接條件應根據SQL標準是可選的,但至少我測試它在MySQL 5.0,這是一個語法錯誤,忽略該條款。但你可以使用ON (1=1)

編輯:回答在評論你的問題:

SELECT COALESCE(reqhead_rec.resp_name, dflt.resp_name) AS resp_name 
FROM (SELECT 'default name' AS resp_name) dflt 
    LEFT OUTER JOIN reqhead_rec ON (1=1) 
WHERE reqhead_rec.req_no = biglist.req_no AND reqhead_rec.frm = biglist.req_frm 
INTO TEMP grabname WITH NO LOG; 

其實,你可以完全跳過臨時表。只需將您的主表加入reahead_rec即可。將這些條件放入連接的ON子句中,而不是在WHERE子句中。然後在該查詢的選擇列表中使用COALESCE(),以便在另一個表中找不到名稱時提供默認名稱。

SELECT b.*, COALESCE(r.resp_name, 'default name') AS resp_name 
FROM biglist AS b 
    LEFT OUTER JOIN reqhead_rec AS r 
    ON (b.req_no = r.req_no AND r.frm = b.req_frm) 
INTO TEMP xxx WITH NO LOG; 
+0

你需要一個「ON」子句,否則你會得到一個錯誤......你可以加入「ON 1 = 1」。 – 2008-12-04 21:12:01

1

嘗試遺漏值