sql那里错啦。查不出数据

qq_21081883 2018-01-03 04:18:34
求大神指点,sql那里错啦。查不出数据,谢谢
MERGE INTO TMP3B90C8C7F05911E79701005056F T1
USING(SELECT T3.FDATAVALUE AS FDATAVALUE ,T2.FENTRYID AS FENTRYID FROM T_SAL_ORDERENTRY T2
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L T3 ON T2.F_PAEZ_ASSISTANT=T3.FENTRYID) T4
ON (T1.FORDERID=T4.FENTRYID)
WHEN MATCHED THEN
UPDATE SET T1.FLYC_Text=T4.FDATAVALUE
WHEN NOT MATCHED THEN
INSERT (T1.FLYC_Text) VALUES (NULL);
...全文
1551 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Diza1986 2018-01-05
  • 打赏
  • 举报
回复
Merge都没搞清楚,Insert部分你想插入什么数据?NULL。。。每一个不匹配就插入一个NULL,为了最后数有多少个? T1没有主键且都允许为空的话可能不会报错,但是不会有这样的写法,把T4中不匹配的KEY值插入到T1中会更有意义, Update部分和Insert部分都应该用到T4的,否则你这Merge的合理性就很值得怀疑。 你先撇开Merge分步把逻辑设计出来,再考虑是否适用于Merge吧, 隐约的感觉着你是想分两种case执行Update,没有Insert的需求
minsic78 2018-01-04
  • 打赏
  • 举报
回复
引用 11 楼 qq_21081883 的回复:
[quote=引用 10 楼 minsic78 的回复:] 到底没有匹配到的时候是“更新为空值”?还是“设置为默认的值”??? 如果像你语句里写的那样,想插入一个空值,这是没有意义的事情,插入一个空行算什么意思? 如果设置为默认值(当前前提是你设置了该字段的默认值),那么就直接: INSERT (FLYC_Text) VALUES (DEFAULT);
想设置为没有匹配的设置为默认值 即为:INSERT (FLYC_Text) VALUES (正常); 这样写也会报错 消息 10739,级别 15,状态 1,第 17 行 MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。 [/quote] INSERT (FLYC_Text) VALUES ('正常'); 字符串要用单引号引起来
qq_21081883 2018-01-04
  • 打赏
  • 举报
回复
引用 10 楼 minsic78 的回复:
到底没有匹配到的时候是“更新为空值”?还是“设置为默认的值”??? 如果像你语句里写的那样,想插入一个空值,这是没有意义的事情,插入一个空行算什么意思? 如果设置为默认值(当前前提是你设置了该字段的默认值),那么就直接: INSERT (FLYC_Text) VALUES (DEFAULT);
想设置为没有匹配的设置为默认值 即为:INSERT (FLYC_Text) VALUES (正常); 这样写也会报错 消息 10739,级别 15,状态 1,第 17 行 MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。
minsic78 2018-01-04
  • 打赏
  • 举报
回复
到底没有匹配到的时候是“更新为空值”?还是“设置为默认的值”??? 如果像你语句里写的那样,想插入一个空值,这是没有意义的事情,插入一个空行算什么意思? 如果设置为默认值(当前前提是你设置了该字段的默认值),那么就直接: INSERT (FLYC_Text) VALUES (DEFAULT);
ZHOU西口 2018-01-04
  • 打赏
  • 举报
回复
教你一个方法,把select简化一下,先验证merge into ... when的结构是否正确使用,
qq_21081883 2018-01-04
  • 打赏
  • 举报
回复
引用 6 楼 xzh19870715 的回复:
你应该把这个语句连上数据库执行一下看报什么错误。 从你的报错上看来,这并不是数据库上的错误。
去掉这2句后可以执行啦,但是我需要在不符合ON后面的条件是,将T1.FLYC_Text的值设置为默认的值,此时以下语句报错,请教如何改,谢谢 WHEN NOT MATCHED THEN INSERT (T1.FLYC_Text) VALUES ('');
qq_21081883 2018-01-04
  • 打赏
  • 举报
回复
引用 7 楼 jdsnhan 的回复:
你把这句话放到plsql中执行,看看可以不
执行报错 消息 10739,级别 15,状态 1,第 17 行 MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。
jdsnhan 2018-01-04
  • 打赏
  • 举报
回复
你把这句话放到plsql中执行,看看可以不
qq_21081883 2018-01-04
  • 打赏
  • 举报
回复
试过啦,没有用,还是一样的,谢谢
朱图图 2018-01-03
  • 打赏
  • 举报
回复
你应该把这个语句连上数据库执行一下看报什么错误。 从你的报错上看来,这并不是数据库上的错误。
qq_21081883 2018-01-03
  • 打赏
  • 举报
回复
引用 3 楼 baidu_36457652 的回复:
报什么错?贴下
以下为报错信息,各位大神麻烦指点,谢谢 “Kingdee.BOS.SQL.Exception.ParserException”类型的异常在 Kingdee.BOS.SQL.dll 中发生,但未在用户代码中进行处理 其他信息: parse error. detail message is : Error: expect token <Punctuation,)>, but current token is <Punctuation,.>, at line 9, column 13) source sql is : MERGE INTO TMP10356E36F08111E7AC14B88198B A USING (SELECT t1.FENTRYID as FENTRYID,t2.FDATAVALUE as FDATAVALUE FROM T_SAL_ORDERENTRY t1 left join T_BAS_ASSISTANTDATAENTRY_L t2 on t2.FENTRYID=t1.F_PAEZ_ASSISTANT)B ON (B.FENTRYID=A.FORDERID) WHEN MATCHED THEN UPDATE SET A.FLYC_Text=B.FDATAVALUE WHEN NOT MATCHED THEN INSERT (T1.FLYC_Text) VALUES ('');
花开了叫我 2018-01-03
  • 打赏
  • 举报
回复
你这个正好就是 不加 exists 的 update 全表
  • 打赏
  • 举报
回复
报什么错?贴下
qq_21081883 2018-01-03
  • 打赏
  • 举报
回复
引用 1 楼 minsic78 的回复:
一个DML语句,要显示什么数据?
就是把t4查询出来的某个字段值更新到t1中的某个字段,符合条件的就更新,不符合条件的更新为空值
minsic78 2018-01-03
  • 打赏
  • 举报
回复
一个DML语句,要显示什么数据?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧