update子查询没有结果时填入某个缺省值,怎么写?

cer 2005-12-28 10:33:30
原update语句是这样:
UPDATE tableA a SET (a.col1,a.col2)=(SELECT b.col1,b.col2 FROM tableB b WHERE b.col3=a.col3) where ......

现在的情况是当子查询:SELECT b.col1,b.col2 FROM tableB b WHERE b.col3=a.col3没有查到结果时这条记录没有不会更新

如果我希望子查询没有结果时,a.col1,a.col2填上某个词如:“china”

这个sql语句怎么写?

...全文
216 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
seerzfm 2005-12-29
  • 打赏
  • 举报
回复
同问
cer 2005-12-29
  • 打赏
  • 举报
回复
我在数据库内就直接写入null了...不填什么'china'了,显示china在显示时判定
cer 2005-12-29
  • 打赏
  • 举报
回复
baidu知道有人给出了别一种思路,但不行,他的思路如下:
UPDATE tableA a
SET (a.col1,a.col2) = (SELECT NVL(b.col1, 'china'),NVL(b.col2, 'china') FROM tableB b WHERE b.col3(+) = a.col3 AND rownum = 1) WHERE ......


地址是:http://zhidao.baidu.com/question/2374944.html
lkpdragon 2005-12-29
  • 打赏
  • 举报
回复
给你一个参考代码 自己去调适去吧 嘻嘻 记得给我分先

SELECT DECODE(需要检测的数据,等于的值,如果等于该值那么输出的值,如果不等于该值那么输出的值) from table.

这样应该就可以了.

tangtangno1 2005-12-29
  • 打赏
  • 举报
回复
原update语句是这样:
UPDATE tableA a SET (a.col1,a.col2)=(SELECT b.col1,b.col2 FROM tableB b WHERE b.col3=a.col3) where ......

现在的情况是当子查询:SELECT b.col1,b.col2 FROM tableB b WHERE b.col3=a.col3没有查到结果时这条记录没有不会更新

-------------没有查到结果时这条记录没有不会更新,这个跟自字查询没有关系,而跟你省略掉的where ......有关系。按照你新发的贴子,只要把那个where ......去掉就可以了
cer 2005-12-29
  • 打赏
  • 举报
回复
SELECT a FROM
(SELECT id a, 1 b FROM `account` UNION
SELECT 'china' a, 0 b FROM `account` WHERE NOT EXISTS
(SELECT id a, 1 b FROM `account`)) AS t ORDER BY b


(select 'china' from `account` where not exists (
select * from `account`)) union
(select id from `account`where id > all (
select 0 from `account`))



这是Q友给我的两个方案记下来然后再看看
cer 2005-12-28
  • 打赏
  • 举报
回复
我少了一个应是这样:
UPDATE tableA a SET (a.col1,a.col2)=(SELECT b.col1,b.col2 FROM tableB b WHERE b.col3=a.col3 AND rownum<2) where ......

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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