用户表user,字段有:id,name...
角色表role,字段有:id,name...
关联表userrole,字段有:userId,roleId
问:把角色名称为“研发人员”的用户“张三”从用户表中删除。
哪里错了呀?
DELETE FROM USER u
WHERE u.id=
(
SELECT u.id FROM USER u
JOIN userrole ur ON u.id=ur.userId
JOIN role r ON ur.RoleId=r.id
WHERE u.name='张三' AND r.name='研发人员'
);
delete 不允许子查询有对同表的操作(具体怎么说忘了,大体那么个意思)!!!楼主可百度下:
DELETE FROM USER u
WHERE u.id=
(
SELECT t.id FROM
(
SELECT u.id FROM USER u
JOIN userrole ur ON u.id=ur.userId
JOIN role r ON ur.RoleId=r.id
WHERE u.name='张三' AND r.name='研发人员'
)t
);
where条件=改成in试试
改成这样试试
DELETE FROM USER user
WHERE user.id=
(
SELECT u.id FROM USER u
JOIN userrole ur ON u.id=ur.userId
JOIN role r ON ur.RoleId=r.id
WHERE u.name='张三' AND r.name='研发人员'
);
第一个USER 别命名为u了
userrole这个若是业务表的话可以直接做单表删除
试试看这样
DELETE u
--SELECT u.id
FROM USER u
JOIN userrole ur ON u.id=ur.userId
JOIN role r ON ur.RoleId=r.id
WHERE u.name='张三' AND r.name='研发人员'
u.id =()改成in试下,报什么错误,能贴下么,
必须用一条SQL语句写出来?按道理这里不是应该删除user表 和userrole表的信息吗?
DELETE FROM USER
WHERE id IN(SELECT id FROM
(SELECT u.id FROM USER u
LEFT JOIN userrole ur ON u.id=ur.userId
LEFT JOIN role r ON ur.roleId=r.id
WHERE u.name='张三' AND r.name='研发人员') tt
);
采纳的答案思路是正确的但是SQL语句编写有问题。
正确的:
DELETE FROM USER
WHERE id=
(
SELECT id FROM(
SELECT u.id FROM USER u
JOIN userrole ur ON u.id=ur.userId
JOIN role r ON ur.RoleId=r.id
WHERE u.name='张三' AND r.name='研发人员'
)a
);
错误:
DELETE FROM USER
WHERE id=
(
SELECT u.id FROM USER u
JOIN userrole ur ON u.id=ur.userId
JOIN role r ON ur.RoleId=r.id
WHERE u.name='张三' AND r.name='研发人员'
);
报错:
错误码: 1093
You can't specify target table 'USER' for update in FROM clause
当我们对a表进行delete或update操作时,from后不能再出现a表,所以再加一层。