从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表中没有一条记录
我应该如何办?
*/


...全文
53 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
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中有重复值。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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