MySQL INSERT使用SELECT语句什么都不做

时间:2013-07-21 03:13:42

标签: mysql select insert where

我正在尝试在表中插入一行,但只有当表中不存在X和Y的组合时,我才会搜索并最终提出这个查询,但它什么也没做,并且没有错误。

INSERT INTO `tiles` (`TileID`, `Type`, `X`, `Y`) 
 SELECT UUID(), (FLOOR(RAND() * 4)), 0, 0 FROM `tiles` 
 WHERE NOT EXISTS (SELECT 1 FROM `tiles` WHERE `X`=0 AND `Y`=0) LIMIT 1;

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

基本上,你只需要用select * from()包装你的选择。这使您的查询:

INSERT INTO `tiles` (`TileID`, `Type`, `X`, `Y`) 
SELECT * FROM (SELECT UUID(), (FLOOR(RAND() * 4)), 0 as x, 0 as y) as tmp
WHERE NOT EXISTS (SELECT 1 FROM `tiles` WHERE `X`=0 AND `Y`=0) LIMIT 1;

我不得不添加“as x”和“as y”,因为mysql抱怨“重复列名'0'”。我的猜测是,如果没有明确写出来的名称,它只使用值作为名称。无论如何,这个查询应该有效。此外,上面的Kyle链接中有关于此类内容的更多信息。

答案 1 :(得分:1)

可能的解决方案可能是在UNIQUE

上添加(x, y)约束
ALTER TABLE tiles ADD UNIQUE (x, y);

并使用INSERT IGNORE

INSERT IGNORE INTO tiles VALUES (UUID(), (FLOOR(RAND() * 4)), 0, 0);
INSERT IGNORE INTO tiles VALUES (UUID(), (FLOOR(RAND() * 4)), 0, 0);

这是 SQLFiddle 演示