我有两个表:products(product_id,date) 和 sex(product_id,sex)。
我想从 products 表中删除所有具有 product_id 的产品,在该 product_id 和 sex=1 的 sex 表中存在一行。
我还希望从 sex 表中删除包含 product_id 的所有行,这些行包含在我从 products 表中删除的行之一中。(这可能会删除每个 product_id 的多行。)
到目前为止我有
DECLARE @recordsToDelete AS TABLE(
int product_id
);
INSERT INTO @recordsToDelete( product_id )
SELECT product_id
FROM products p
JOIN sex s
ON p.product_id = s.product_id
WHERE s.sex = 1;
然后我会用
SELECT * FROM @recordsToDelete;
在执行之前
DELETE FROM products
WHERE product_id IN ( SELECT product_id FROM @recordsToDelete );
DELETE FROM sex
WHERE product_id IN ( SELECT product_id FROM @recordsToDelete );
但 DECLARE 语句给了我一个语法错误。我在这里注意到 DECLARE 需要一个 BEGIN/END 复合语句,但我无法正确地制定它。我怎样才能纠正我的错误?
编辑:
通过固定
CREATE TEMPORARY TABLE recordsToDelete(
product_id INT
);# MySQL returned an empty result set (i.e. zero rows).
INSERT INTO recordsToDelete( product_id )
SELECT p.product_id
FROM products p
JOIN sex s ON p.product_id = s.product_id
WHERE s.sex =1;# Affected rows: 275
SELECT *
FROM recordsToDelete;