2012-07-10 112 views
0

我有问题创建语句删除多个字段上的连接记录。我搜索了很多解决方案,但仍然不适合我。MySQL删除加入多个ON字段

我有两个表: orders.profile和orders.qualified

没有一个简单的单场,但多间加入。基本上基于客户的需求,他们档案中存储的一些项目可能不符合地理位置的要求,因此需要将其删除。

这是我一直在玩的,目前我得到UNKNOWN TABLE错误,当我从开始的表定义中删除数据库时,我得到一个NO DATABASE SELECTED错误。

DELETE FROM orders.profile 
USING orders.profile AS p 
LEFT OUTER JOIN orders.qualified AS q 
ON p.cust_id = q.cust_id 
AND p.job_number = q.job_number 
AND p.job_seg = q.job_seg 
AND p.zip = q.zip 
AND p.carrier_route = q.carrier_route 
WHERE p.cust_id = {the cust_id in question} 
AND p.job_number = {the job number in question} 
and q.qualified = 0; 

回答

1

根据Holger Brandt的回答,我可以通过定义数据库和别名来获得这个工作。

所以查询应该是这样的:

DELETE orders.p 
FROM orders.profile AS p 
LEFT OUTER JOIN orders.qualified AS q 
ON p.cust_id = q.cust_id 
AND p.job_number = q.job_number 
AND p.job_seg = q.job_seg 
AND p.zip = q.zip 
AND p.carrier_route = q.carrier_route 
WHERE p.cust_id = {the cust_id in question} 
AND p.job_number = {the job number in question} 
and q.qualified = 0; 
1

尝试删除不USING声明:

DELETE p FROM 
orders.profile AS p 
    LEFT OUTER JOIN orders.qualified AS q 
    ON p.cust_id = q.cust_id ... 

如果这不起作用,有一些更基本的事情。

+0

我没有得到任何选择的数据库......我读过多个地方明确说与多行删除时不能使用别名。 – Jeff 2012-07-11 00:03:27

+0

@Jeff,我编辑了答案。如果它不起作用,那么更重要的是去做一件事。另外,'orders.profile'是否有主键? – 2012-07-11 00:19:34

+0

好吧,我想我明白了。数据库需要定义,并且必须使用别名。 – Jeff 2012-07-11 00:24:06