MySQL 条件插入
我很难形成条件插入
我有 x_table 列(实例、用户、项目),其中实例 ID 是唯一的.只有当用户已经没有给定的项目时,我才想插入一个新行.
I have x_table with columns (instance, user, item) where instance ID is unique. I want to insert a new row only if the user already does not have a given item.
例如尝试插入 instance=919191 user=123 item=456
For example trying to insert instance=919191 user=123 item=456
Insert into x_table (instance, user, item) values (919191, 123, 456)
ONLY IF there are no rows where user=123 and item=456
在正确方向上的任何帮助或指导将不胜感激.
Any help or guidance in the right direction would be much appreciated.
推荐答案
如果您的 DBMS 没有对您在执行插入时选择的表施加限制,请尝试:
If your DBMS does not impose limitations on which table you select from when you execute an insert, try:
INSERT INTO x_table(instance, user, item)
SELECT 919191, 123, 456
FROM dual
WHERE NOT EXISTS (SELECT * FROM x_table
WHERE user = 123
AND item = 456)
在这里,dual
是一个只有一行的表(最初在 Oracle 中发现,现在也在 mysql 中).逻辑是 SELECT 语句生成具有所需值的单行数据,但仅在尚未找到值时才生成.
In this, dual
is a table with one row only (found originally in Oracle, now in mysql too). The logic is that the SELECT statement generates a single row of data with the required values, but only when the values are not already found.
或者,查看 MERGE 语句.
Alternatively, look at the MERGE statement.
相关文章