从A、B两个表里Select数据到temp表的郁闷问题!

Dugu_Niu 2003-12-12 02:17:09
INSERT INTO [temp]
SELECT Table1.id, Table1.name, Table1.sex, 'from Table1'
FROM table1
UNION
SELECT Table2.id, table2.name, table2.sex, 'from Table2'
FROM table2

/*
表temp中有四个字段,id,name,sex,source
Table1、Table2中没有source这个字段,我想用source来标识数据的来源
但上面的语句不能运行,提示 不能在temp中插入重复值 
但我的temp表中没有一条记录
我应该如何办?
*/


...全文
37 19 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Dugu_Niu 2003-12-12
to zyrlxy(海妖) :
非常感谢你的解答。我也发现问题的所在了
当两个select 语句''中的内容不同是,union的结果就是table1 + table2的结果,永远不会用相同的记录。
这样在insert的时候就出问题了。id,name,sex相同的不让进。

不改思路不行了

揭帖了!

  • 打赏
  • 举报
回复
zyrlxy 2003-12-12
三个关键字,只要有一个重复就会报错。
用union只能保证两个表中完全相同的数据不再重复而已。
看来你要改思路了
  • 打赏
  • 举报
回复
zyrlxy 2003-12-12
找到问题了。因为你的source赋值不一样,所以即使用了union也不能避免重复。
  • 打赏
  • 举报
回复
Dugu_Niu 2003-12-12
又有新发些:如果两个''中写入一样的值就没有问题,

但这样我source字段就没有了意义。source字段就是要记录数据来源于那个表
  • 打赏
  • 举报
回复
Dugu_Niu 2003-12-12
当然有了,否则我用UNION 干怎么呀?

现在问题是时''中如果什么也不写就没有问题,
如果''中写了table1/table2后就出问题了
  • 打赏
  • 举报
回复
IceRiver_11 2003-12-12
如果TEMP表有主键那么就检查您的两个源表中对于主键有没有重复的记录啊!
  • 打赏
  • 举报
回复
Dugu_Niu 2003-12-12
temp上有主键,id,name,sex都是主键
  • 打赏
  • 举报
回复
zyrlxy 2003-12-12
temp中有主键吗?
  • 打赏
  • 举报
回复
zyrlxy 2003-12-12
我怎么运行你的程序都没问题
如果改成
INSERT INTO temp
SELECT Table1.id, Table1.name, Table1.sex, 'Table1'
FROM table1
UNION
SELECT Table2.id, table2.name, table2.sex, 'Table2'
FROM table2
呢?
  • 打赏
  • 举报
回复
Dugu_Niu 2003-12-12
to 天草:
问题依旧
违反了 PRIMARY KEY 约束 'PK_temp'。不能在对象 'temp' 中插入重复键。
  • 打赏
  • 举报
回复
iamyuqing 2003-12-12
try
-------------------------------------------------
INSERT INTO [temp]
SELECT Table1.id, Table1.name, Table1.sex, 'from Table1' as 'source'
FROM table1
UNION
SELECT Table2.id, table2.name, table2.sex, 'from Table2' as 'source'
FROM table2
  • 打赏
  • 举报
回复
Dugu_Niu 2003-12-12
没有人能帮帮我吗?
自己顶
  • 打赏
  • 举报
回复
Dugu_Niu 2003-12-12
把source的长度改为50也不行
  • 打赏
  • 举报
回复
Dugu_Niu 2003-12-12
source字段在temp表中是char类型,长度是10,可以为空,不是主键,不是索引
  • 打赏
  • 举报
回复
zyrlxy 2003-12-12
看下你temp表中source字段是什么类型,给的长度够不够。
应该跟你表中的数据类型有关系。
  • 打赏
  • 举报
回复
Dugu_Niu 2003-12-12
当然table1和table2中有重复记录了否则要UNION做什么呀?

我把它改为

INSERT INTO [temp]
SELECT Table1.id, Table1.name, Table1.sex, ''
FROM table1
UNION
SELECT Table2.id, table2.name, table2.sex, ''
FROM table2

之后就没有问题了。为什么我给source附值就有问题了?
source在temp表中不时索引,不是主键,可以为空


  • 打赏
  • 举报
回复
zyrlxy 2003-12-12
你的字段属性是什么?我运行你的程序没有问题
  • 打赏
  • 举报
回复
fmdsaco 2003-12-12
应该是TEBLE1.ID 和TEBLE2。ID 有重复吧
  • 打赏
  • 举报
回复
victorycyz 2003-12-12
是你的表1和表2中有重复值。
  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server
加入

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
申请成为版主
帖子事件
创建了帖子
2003-12-12 02:17
社区公告
暂无公告