新手简单SQL语句编写。

用户表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试下,报什么错误,能贴下么,

此为报错信息,上边说的,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表,所以再加一层。