简单的SQL代码逃避我..成立工会两个极不相称的表
-
19-08-2019 - |
题
我选择从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;
解决方案
什么字段将它与匹配吗?顺便说一句,这里是如何将它们排队:
SELECT NULL, NULL, NULL, NULL, MySingleField, NULL, NULL, NULL... FROM #temp
UNION ALL
SELECT Col1, Col2, Col3, Col4, Col5, Col6,... FROM OtherTable
更新:
OK,阅读你的更新后......我不认为你想有一个UNION可言,而是和非常简单的子查询
SELECT
*,
(SELECT TOP 1 Name FROM Blah WHERE Blah.SomeID = MyTable.SomeID) AS ExtraCol
FROM
MyTable
其他提示
这听起来像你想的联接,不是工会。
您不需要任何比较做加盟。你结束了一个跨产品,如果你没有指定连接条件:
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
或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;
尝试缺失值选择nvl(NULL,NULL)
不隶属于 StackOverflow