我有这个查询,可以完美地插入表中不存在的值:
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
...
我知道该错误是有道理的。但是我需要一种避免它的方法。
您可以运行以上查询以查看错误。
关于如何解决这个问题的任何想法?
如果您知道在值不存在时插入值的另一种方法,我也将不胜感激。
答案 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?