求助:一个关于SQL联表查询插入的问题

szu_john 2011-08-16 02:40:55
insert into table1 select NEWID(),b.DWID,'','1900-1-1',1 from table1 a,table2 b where a.DWID!=b.DWID and b.UserID in (171,3)


这个语句为什么在tabel1为空表的时候没有生效?当表table1有记录时正常。
...全文
117 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
szu_john 2011-08-16
  • 打赏
  • 举报
回复
谢谢各位,问题已解决,结贴。
--小F-- 2011-08-16
  • 打赏
  • 举报
回复
匹配是可以的 但是没有值插入 或者说插入的是空值 所以tabel1为空表的时候没有记录
jiemo587 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acherat 的回复:]
null不能拿来做比较,所以你where条件后边 a.DWID != B.DWID 最终还是一个null,也就没什么可插入的。

可以采用1楼,或者将not in改为not exists等。
[/Quote]

我测试过了,NULL也可以拿来比较,如果table1为空的话,就可以匹配到table2表where条件之后的值
jiemo587 2011-08-16
  • 打赏
  • 举报
回复


insert into table1
select NEWID(),b.DWID,'','1900-1-1',1 from table1 a
right join table2 b on a.DWID!=b.DWID
where b.UserID in (171,3)



小雄 2011-08-16
  • 打赏
  • 举报
回复
你table1里面木有数据木有值。你也木有值可以插入进去。。可以参照楼上几位给出的答案。。都OK的。。
AcHerat 2011-08-16
  • 打赏
  • 举报
回复
null不能拿来做比较,所以你where条件后边 a.DWID != B.DWID 最终还是一个null,也就没什么可插入的。

可以采用1楼,或者将not in改为not exists等。
NBDBA 2011-08-16
  • 打赏
  • 举报
回复
insert into table1 select NEWID(),b.DWID,'','1900-1-1',1 from table2 b 
left join table1 a on a.DWID=b.DWID
where b.UserID in (171,3)
and a.DWID is null

chuanzhang5687 2011-08-16
  • 打赏
  • 举报
回复
insert into table1 
select NEWID(),b.DWID,'','1900-1-1',1
from table2 b where b.dwid not in(select dwid from a)
and b.UserID in (171,3)
--这样行不

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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