1

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

PRODUCTS id 名称已停用(ENUM:0 或 1)等

VARIANTS id product_id 颜色大小

STOCK id variant_id branch_id

当用户选择停止产品时,我将停止标志设置为 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";

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

提前致谢

4

2 回答 2

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

于 2012-06-24T11:06:49.743 回答
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'
于 2012-06-24T10:54:48.573 回答