我从1个表中选择1个字段并将其存储到临时表中。
有时该表最终会有0行。
我想将该字段添加到另一个包含20多个字段
的表中由于字段#matmatch不合适,常规联合对我不起作用。 外面不适合我,因为没有什么可比的。 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 :(得分: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。
但是,如果临时表中有多行,您将获得第一个表的叉积。我无法从你的问题中看出你想要什么。
编辑:根据SQL标准,ON
或USING
子句中表示的连接条件应该是可选的,但至少我在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;
答案 1 :(得分:3)
它会匹配哪个字段?顺便说一下,这是如何排列它们的:
SELECT NULL, NULL, NULL, NULL, MySingleField, NULL, NULL, NULL... FROM #temp
UNION ALL
SELECT Col1, Col2, Col3, Col4, Col5, Col6,... FROM OtherTable
更新:
好的,看完你的更新后...我觉得你根本不想要UNION,而是非常简单的SUBSELECT
SELECT
*,
(SELECT TOP 1 Name FROM Blah WHERE Blah.SomeID = MyTable.SomeID) AS ExtraCol
FROM
MyTable
答案 2 :(得分:1)
尝试选择nvl(NULL,NULL)
表示缺失值