我将客户记录插入到表中,如果已存在同名记录,我会为新插入的记录分配相同的 ID。
假设表 T 有以下记录:
ID | Name | Phone_Number | Date_Inserted
105| Sam | 111111 | 04/03/2014
106| Rita | 222222 |04/03/2014
我从表 A 插入这个:
Name| Phone_Number
Sam | 333333
然后插入后,表 T 应该有:
ID | Name | Phone_Number | Date_Inserted
105| Sam | 111111 | 04/03/2014
106| Rita | 222222 | 04/03/2014
105| Sam | 333333 | 04/04/2014
如果没有上述更改,它将看起来像:
INSERT INTO T SELECT CustID.nextval,Name,Phone_Number,SYSDATE FROM A;
本来想用的
INSERT INTO T
SELECT CASE
WHEN NOT EXISTS(select null from T WHERE T.Name=A.Name) THEN CustID.nextVal
ELSE (select ID from T where T.Name=A.Name)
END,
Name,
Phone_Number,
SYSDATE
FROM A;
但我不确定它是否会起作用,而且它似乎对性能来说是多余的/不利的。如果有更好的方法来做到这一点,请告诉我。
最佳答案
如果您的架构不是一成不变的,我可能会重新配置它,以便有一个“人员”表和一个单独的“人员电话号码”表。通过这种设置,您可以将多个电话号码与一个人相关联,并且您不会踩踏 ID,或创建不是主键的令人困惑的辅助 ID 列。
关于sql - 查询以将相同的 ID 分配给插入的行,如果它已存在于表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25065372/