1

1つのテーブルから1つのフィールドを選択し、それを一時テーブルに格納しています。

そのテーブルが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;
4

3 に答える 3

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 として報告されます。

ただし、一時テーブルに複数の行がある場合は、最初のテーブルとの外積が得られます。あなたの質問からは、あなたが何を望んでいるのかわかりません。

編集:ON or句で表現される結合条件はUSING、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;

実際には、一時テーブルを完全にスキップできる場合があります。メインテーブルを に LEFT JOIN するだけ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;
于 2008-12-04T21:06:17.220 に答える
3

それはどの分野と一致しますか?ところで、それらを並べる方法は次のとおりです。

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

アップデート:

OK、更新を読んだ後... UNION はまったく必要ないと思いますが、信じられないほど単純な SUBSELECT

SELECT
    *,
    (SELECT TOP 1 Name FROM Blah WHERE Blah.SomeID = MyTable.SomeID) AS ExtraCol
FROM
    MyTable
于 2008-12-04T21:10:41.967 に答える
1

nvl(NULL,NULL)欠損値を選択してみてください

于 2010-11-26T04:27:43.447 に答える