我有表,我将记录插入到另一个表。 标记记录插入的最佳方式是什么,所以它不会被尝试再次插入?标记记录插入
标记记录插入
回答
你可以看到像这样的两个表之间的差异:从tableFoo
SELECT *
LEFT JOIN tableBar ON tableFoo.commonColumn = tableBar.commonColumn
WHERE tableBar.commonColumn IS NULL
这个想法是,两个表都有一个要匹配的列,当列为空时加入的记录是仅存在于tableBar中的记录。
这个工作原因是因为即使其中一个表具有空值,左连接也会返回记录,这与内连接不同,后者的做法相反。
获得这些记录后,您可以根据返回的ID插入。
我还没有共同的列,我可以尝试添加一个,如何结合2列kkep它独特(其中一个将是时间戳)这将是可能的吗? – Ossi 2009-10-22 14:21:50
这两个表都应该有唯一的列,如ID。您可以加入该专栏。 – 2009-10-22 14:23:11
如果您不明白,请随时提出更多问题:]并感谢接受! – 2009-10-22 14:29:34
插入只记录不是在你的其他表,或者使用一个NOT EXISTS
条款或通过左侧的接合部和从结果
最好的办法是使用公共密钥过滤所有not-NULL
记录(或有关键第一个表格是第二个表格键的主要部分)。这样,您只需从表1中选择不存在的行即可。
如果您需要以某种方式转换密钥,最佳选择是在TABLE1上使用插入触发器:当您在其中插入行时,触发器将触发,并且您可以将数据插入到TABLE2中。这具有使用单个事务的好处 - 也是缺点。这是一个好处,因为您保留数据一致性,如果将TABLE2用于报告或其他非必要目的,则是缺点。
不要决定在TABLE1中使用表示行已插入的标志。这对于逻辑和物理设计来说都很丑陋,因为您将表中的数据耦合到使用该表的进程。
你是什么意思“第一个表的关键是第二个表的关键的主要部分”? – Ossi 2009-10-22 14:23:21
我经常使用两种方法。根据表格的性质,一种方式可能比另一种方式更好,但是如果您使用#2,则可能有机会使表格结构更好。
1.)确保您的表已编入索引并具有良好的主键。从table1中选择主键在table2中不存在的所有记录。这个作品将用于规格化的表格
2.)如果你的表格没有被标准化,并且没有很好的密钥,你可以添加一个ProcessedDate到table1。插入具有空ProcessDate的所有记录,然后将ProcessDate设置为当前日期时间。在插入table2的过程中,您只需确保没有新记录插入到table1中。
不知道你的表格结构很难给出一个很好的答案。
- 1. 插入记录
- 2. 插入记录
- 3. 插入记录
- 4. 记录MSSQL插入
- 5. has_many记录插入
- 6. 插入批记录,许多插入查询,游标,while循环或事务记录每个记录更好
- 7. 在光标内循环插入记录
- 8. 插入记录基于标志
- 9. 如何将所有TClientDataSet记录标记为插入?
- 10. awk在匹配的标记打印中插入行/记录
- 11. 经典ASP:插入记录
- 12. 插入重复记录LINQ
- 13. Web API插入记录
- 14. 多记录插入 - Classsic ASP
- 15. 插入记录与数
- 16. SQL不插入记录
- 17. 插入记录到sqlserver db
- 18. Android循环插入记录
- 19. Java-Oracle插入记录
- 20. 插入记录的sql
- 21. 插入下一记录
- 22. PDO无法插入记录
- 23. 插入记录的MySQL
- 24. 插入100000+记录在MySQL
- 25. Linq to Entity - 插入记录
- 26. 从记录中插入html
- 27. SqlDataAdapter.Update没有插入记录
- 28. 插入表中的记录
- 29. PHP,MYSQL记录不插入
- 30. 插入记录冬眠
示例代码表示赞赏;) – Ossi 2009-10-22 14:03:16