我有一个像这样的“用户”SQL 表结构(ID 是随机生成的,不是自动递增的):
ID name deleted lastActive
3242 Joe 0 20-6-2012 23:14
2234 Dave 0 20-6-2012 23:13
2342 Simon 1 20-6-2012 23:02
9432 Joe 1 20-6-2012 22:58
可以有多个已删除(deleted=1)的同名用户,但只有 1 个未删除的同名用户(所以加 Simon 没问题,但 Dave 不行)。如何仅在一个 SQL 查询中没有同名且 deleted=0 的记录时才插入?我需要这样的东西:
INSERT INTO users (ID, name) VALUES ($id, $name)
WHERE NOT EXISTS (SELECT 1 FROM users WHERE name = $name AND deleted = 0)
但这不是正确的语法。
最佳答案
用 LEFT JOIN 设置
- 子查询 A 包含别名为 ID 的随机数和别名为 name 的 $name。
- 子查询 B 选择未删除的 name = $name。
- LEFT JOIN A 到 B 并返回 A.* 如果它没有 LEFT JOIN 的右侧对应物
这是查询
INSERT INTO users (ID,name)
SELECT A.* FROM
(SELECT RAND() ID,'$name' name) A LEFT JOIN
(SELECT name FROM users WHERE name='$name' AND deleted=0) B
USING (name) WHERE B.name IS NULL;
关于php - 如果不存在不同的结果,则插入到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145600/