products(product_id,date) と sex(product_id,sex) の 2 つのテーブルがあります。
このproduct_idとsex = 1のsexテーブルに行が存在するproduct_idを持つすべての製品をproductsテーブルから削除したいと思います。
また、products テーブルから削除する行の 1 つに含まれる product_id を含むすべての行を sex テーブルから削除したいと考えています。(これにより、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;