3

アイテムの表と別のレポートがあります。各レポートには、レポートされているアイテムにリンクする外部キーがあります。

このクエリに表示されているすべてのアイテムを削除しようとしています。

SELECT items.id, title, SUM(weight) AS total_weight, SUM(weight)*10/views AS score 
FROM items, reports 
WHERE items.id = reports.item_id 
GROUP BY items.id 
HAVING score >= 50;

このようなことを試してみてください:

DELETE items 
FROM (SELECT items.id, title, SUM(weight) AS total_weight, SUM(weight)*10/views AS score 
    FROM items, reports 
    WHERE items.id = reports.item_id 
    GROUP BY items.id 
    HAVING score >= 50)
AS T;

このエラーメッセージが表示されます:

ERROR 1109 (42S02): Unknown table 'items' in MULTI DELETE
4

4 に答える 4

4

MySQLでは、サブクエリに注意する必要があります。私は次の作品だと思います:

DELETE FROM items 
WHERE id IN (select *
             from (SELECT items.id 
                   FROM items join reports 
                        on items.id = reports.item_id 
                   GROUP BY items.id 
                   HAVING SUM(weight)*10/views >= 50
                  )
            )

追加のサブクエリを使用して、コンパイラをだましてクエリを受け入れさせます。join構文も修正しました。

ただし、以下は、相関サブクエリを使用して、クエリをより一般的な構文に書き換えます。

delete from items
where exists (select r.item_id
              from reports r
              where r.item_id = items.item_id 
              group by r.item_id
              having SUM(r.weight)*10/items.views >= 50
             )

これは推測でweightあり、代わりに前のアイテムのエイリアスviewsから来ています。reports. Otherwise, you need to put the

于 2012-12-27T16:37:06.573 に答える
4
DELETE FROM items 
WHERE 
  id IN (
    SELECT 
      items.id 
    FROM items, reports 
    WHERE items.id = reports.item_id 
    GROUP BY items.id 
    HAVING SUM(weight)*10/views >= 50)
于 2012-12-27T16:26:32.480 に答える
2

あなたのdelete発言は間違っていると思います。する必要がありますdelete from tablename where [condition]

    DELETE FROM items 
    WHERE 
      id IN (
        Select T.id from (SELECT items.id, title, SUM(weight) AS total_weight, SUM(weight)*10/views AS score 
FROM items, reports 
WHERE items.id = reports.item_id 
GROUP BY items.id 
HAVING score >= 50) T)
于 2012-12-27T16:27:50.890 に答える
1

これを試して:

DELETE FROM items 
WHERE id IN (SELECT id 
             FROM (SELECT i.id itemId, (SUM(weight) * 10 / views) score
                   FROM items i INNER JOIN reports r ON i.id = r.item_id 
                   GROUP BY itemId HAVING score >= 50
                  ) AS A
            );
于 2012-12-27T16:40:28.587 に答える