【发布时间】:2013-05-03 20:20:33
【问题描述】:
我想运行一组查询以将一些数据插入到 SQL 表中,但前提是满足某些条件的记录。该表有 4 个字段:id(主)、fund_id、date 和 price
我在查询中有 3 个字段:fund_id、date 和 price。
所以我的查询会是这样的:
INSERT INTO funds (fund_id, date, price)
VALUES (23, '2013-02-12', 22.43)
WHERE NOT EXISTS (
SELECT *
FROM funds
WHERE fund_id = 23
AND date = '2013-02-12'
);
所以我只想在不存在匹配fund_id 和date 的记录时插入数据。如果以上是正确的,我觉得这是一种非常低效的实现方式,因为每次都必须运行额外的 select 语句。
有没有更好的方法来实现上述目标?
编辑:为了澄清,fund_id 和 date 都不是唯一字段;将存在共享相同fund_id 或日期的记录,但没有记录应该具有与另一个相同的fund_id 和日期。
【问题讨论】:
-
您使用的是哪个 RDBMS? SQL Server、MySQ、Oracle、MSAccess?
-
MySQL 虽然我希望它也可以与 MSAccess 一起工作,如果 poss
-
似乎 ID 和日期是您逻辑上唯一的键。为什么不声明它们是唯一的并在违反唯一键约束时处理数据库异常?
-
方法很好。但是,正如 Trinimon 的回答中指出的那样,您的 sql 无效。如果使用 values 关键字,则不能有 where 子句。
标签: mysql sql sql-insert