2010-04-14 47 views
0

我想删除通过查询找到的所有行:的MySQL从1个表中删除,使用多个表

SELECT cart_abandon.* 
FROM cart_abandon, cart_product, txn_product, users 
WHERE cart_abandon.cartid = cart_product.cartid 
AND cart_product.productid = txn_product.productid 
AND txn_product.username = users.username 
AND users.id = cart_abandon.userid 
AND txn_product.txndate >= cart_abandon.abandondate 

要记住的一点是,查询在这里使用4个不同的表,但是我只想从1个表中删除行(cart_abandon)。

有没有简单的方法来做到这一点?也许这个:?

DELETE cart_abandon 
FROM cart_abandon, cart_product, txn_product, users 
WHERE cart_abandon.cartid = cart_product.cartid 
AND cart_product.productid = txn_product.productid 
AND txn_product.username = users.username 
AND users.id = cart_abandon.userid 
AND txn_product.txndate >= cart_abandon.abandondate 

这有效吗?正确?

回答

0
+0

我做过了,但实际上我并不清楚,这就是我来到这里的原因...... – 2010-04-14 22:54:10

+0

但是,从我的理解中,我明白了我上面提出的提议查询 - 是正确的吗? – 2010-04-14 22:55:15

+1

看起来你的查询没问题,你使用第一种语法(在FROM之前从表中删除行: DELETE cart_abandon FROM – a1ex07 2010-04-14 22:55:48

0
DELETE cart_abandon 
WHERE cartid IN (
    SELECT cart_abandon.cartid 
    FROM cart_abandon, cart_product, txn_product, users 
    WHERE cart_abandon.cartid = cart_product.cartid 
    AND cart_product.productid = txn_product.productid 
    AND txn_product.username = users.username 
    AND users.id = cart_abandon.userid 
    AND txn_product.txndate >= cart_abandon.abandondate 
)