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;

实际上,您可以完全跳过临时表。只需将您的主表左连接到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

更新:

好的,在阅读了您的更新之后...我认为您根本不想要一个 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 回答