SQL连表删除与更新


一、连表删除:

需要注意的一个问题是,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语句可以在下面的链接中找到:

SQL语句


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值