我正在寻找一个语句,它将尝试将一行插入到表中,但如果遇到重复行则返回重复行的主键。表中的一个字段是自增主键,另一个是唯一的。
问问题
1966 次
2 回答
1
至少在理论上,这应该对您有用:
首先扩展您的表以添加一个 tinyint 类型的附加列。然后您可以在插入/更新时使用以下查询:
INSERT INTO yourtable (a, b) VALUES (1, 2) ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id), dummy = NOT dummy
(我在这里假设列 a 具有唯一索引并且存在 a=1 的行。)
然后,您可以通过以下方式获取新行的 ID(如果是 INSERT)或现有行(如果是 UPDATE)
SELECT LAST_INSERT_ID()
于 2010-06-20T10:45:43.073 回答
0
这应该可以在 DB2 中使用,不知道它是否可以在 MySQL 中使用,或者是否有特殊的 MySQL 语法:
SELECT pk, 'inserted' FROM FINAL TABLE (
INSERT INTO table (Col1)
SELECT Val1
FROM table
WHERE col1 != Val1
FETCH FIRST ROW ONLY
)
UNION
SELECT pk, 'existing'
FROM table
WHERE col1 = val1
这里的想法是当那里没有唯一值时从表中选择一行,插入新值并从表中返回生成的主键。然后,如果唯一值已在表中,则将其与返回相应键的 select 组合。只有其中一个语句应该返回一行,第二列指示主键是新的还是现有的。
于 2010-06-20T10:45:16.467 回答