0

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;
4

3 に答える 3

1

代わりにこれを試してみませんか?

CREATE TEMPORARY TABLE tempTable
      SELECT product_id  
        FROM products AS p
  INNER JOIN sex AS s
          ON p.product_id = s.product_id 
       WHERE s.sex = 1;

 DELETE FROM products AS p
NATURAL JOIN tempTable AS t
       WHERE p.product_id = t.product_id;

ところで、できませんDELETE FROM same_table (SELECT * FROM same_table)

私は引用します:
Currently, you cannot delete from a table and select from the same table in a subquery.

http://dev.mysql.com/doc/refman/5.5/en/delete.html

于 2012-04-17T18:06:44.400 に答える
1

CREATE TEMPORARY TABLEの代わりにテーブルを作成することを探していると思いますDECLARE

MySQL でのテーブル作成の詳細については、このページを参照してください。

使用している構文は、MySQL ではなく MS SQL サーバー用のようです。MySQL では、DECLAREローカル変数、条件、ハンドラー、およびカーソルに使用されますが、テーブルの作成には使用されません。

于 2012-04-17T17:57:13.430 に答える
1

単純なマルチテーブルの削除から必要なものを取得できると思います:

delete sex, products from products p 
inner join sex s on p.id=s.product_id
where s.sex=1

テーブルでの使用を検討することもできon cascade deleteます: http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

于 2012-04-17T18:20:40.087 に答える