MySQL DELETE与JOIN条件

时间:2012-06-24 09:43:12

标签: mysql

我有3张桌子;产品,变体和库存{简化}

产品 ID 名称 已停止(ENUM:0或1) 等

VARIANTS ID PRODUCT_ID 颜色 大小

STOCK ID variant_id branch_id

当用户选择停止PRODUCT时,我将已停止的标志设置为1.这没关系,但如果没有产品的STOCK记录,我想完全删除PRODUCT和VARIANTS记录。显然,我可以首先在PHP中使用SELECT查询,但我想在一个mySQL查询中执行此操作。这是我到目前为止,但它从mySQL返回错误:

$query = "DELETE FROM prod_lines, 
  JOIN variants ON variants.lineid = prod_lines.id
  WHERE prod_lines.id = '$lineid' AND
  (SELECT COUNT(id) FROM stock WHERE stock.variantid = variants.id) = 0";

那里有人帮我提出正确的解决方案吗?也许有更好的方法甚至不涉及子查询?

提前致谢

2 个答案:

答案 0 :(得分:3)

我认为您查询中的product_line表格是您在帖子开头描述的PRODUCTS表格。

DELETE prod_lines.*  -- you must specify which table you are deleting from, because there are several tables in the FROM clause
FROM prod_lines
JOIN variants ON variants.lineid = prod_lines.id
LEFT JOIN stock ON stock.variantid = variants.id
WHERE prod_lines.id = @lineid -- your "$lineid" variable here
AND stock.id IS NULL; -- selects only items with no match in the "stock" table

http://sqlfiddle.com/#!2/40a21

答案 1 :(得分:0)

尝试这样的事情,不利的一面是虽然你必须在这里有两个php变量,还有一个你可能不适合的嵌套查询

   DELETE FROM (select COUNT(id) countstock FROM stock s,variants v WHERE s.variantid = v.id and v.productid='$lineid') prod 
    where prod.countstock>1 and prod.productid='$lineid'