一、连表删除:
需要注意的一个问题是,MySQL中,update、delete不能使用select的结果,必须连表。
比如,有一个users用户表,里面有一条信息:
又有一个用户爱好表hobby,其中uid弱关联了users表的数据:
这时候我想把爱好为piano的user在users表中都删除,但不删除hobby表中的数据,下面的sql在sql server是可以的,在mysql中是不行的:
DELETE FROM users WHERE id IN (
SELECT u.id FROM users u
LEFT JOIN hobby tna
ON
u.id = tna.uid
WHERE hobby = 'piano'
);
所以,只能连表进行删除
DELETE u FROM users u
LEFT JOIN
hobby tna ON u.id = tna.uid
WHERE
tna.hobby = 'piano';
其中DELETE后面指定的为要删除的表,比如现在LEFT JOIN之后查出的字段其实是在两张表中,DELETE后面即为指定要删除的表的名称,如果为
DELETE u,tna FROM users u LEFT JOIN
tal_new_author tna ON
u.id = tna.uid
WHERE tna.hobby = 'piano';
那么两张表中的字段都会删除
二、连表更新:
现在要把hobby为piano的user的name改为pianoboy,就可以使用下面的sql语句:
UPDATE users u
LEFT JOIN
hobby h ON u.id = h.uid
SET
u.name = 'pianoboy'
WHERE
h.hobby = 'piano';
上述为连表更新一张表
如果是要把hobby为piano的user的hobby改为swim,在把此用户改成swimboy,可以这样:
UPDATE users u
LEFT JOIN
hobby h ON u.id = h.uid
SET
h.hobby = 'swim',
u.name = 'swimboy'
WHERE
h.hobby = 'piano';
具体的SQL语句可以在下面的链接中找到: