当两列的值相同时,INSERT WHERE NOT EXISTS不起作用

时间:2019-10-29 13:36:25

标签: mysql sql

我有这个查询,可以完美地插入表中不存在的值:

INSERT INTO my_table (code, type, user_id)
SELECT * FROM (SELECT 11, 2, 1) as tmp
WHERE NOT EXISTS (SELECT 1 FROM my_table WHERE code = 11 AND type = 2 AND user_id = 1) LIMIT 1;

但是当我对两列使用相同的值时,会导致duplicate column (#1060)错误。

这是导致错误的查询:

INSERT INTO my_table (code, type, user_id)
SELECT * FROM (SELECT 11, 1, 1) as tmp
WHERE NOT EXISTS (SELECT 1 FROM my_table WHERE code = 11 AND type = 1 AND user_id = 1) LIMIT 1;

我尝试了该代码的一些变体,但无法正常工作。

问题是这一行:

...
SELECT * FROM (SELECT 11, 1, 1) as tmp
...

我知道该错误是有道理的。但是我需要一种避免它的方法。

您可以运行以上查询以查看错误。

关于如何解决这个问题的任何想法?

如果您知道在值不存在时插入值的另一种方法,我也将不胜感激。

1 个答案:

答案 0 :(得分:3)

完整错误为ERROR 1060(42S21):重复的列名“ 1”,这是正确的

MariaDB [sandbox]> SELECT * FROM (SELECT 11, 1, 1) as tmp;
ERROR 1060 (42S21): Duplicate column name '1'

然后的问题是,在子查询中,在没有别名的情况下从该值获取列名。 所以要么提供一个别名

SELECT * FROM (SELECT 11 c1, 1 c2, 1 c3) as tmp

或只是选择

SELECT 11, 1, 1

我不清楚您为什么要使用tmp?