我有这样的’用户’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
可以有多个具有相同名称的已删除(已删除= 1)用户,但只有1个具有相同名称的未删除用户(因此添加Simon很好,但Dave不是).如果在一个SQL查询中没有已经具有相同名称且已删除= 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.
>子查询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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。