2

私は、mysql が複数のテーブル削除クエリで LIMIT を使用できないことを認識しています。オンラインで解決策を探しましたが、それらを自分のニーズに適応させる方法がわかりません。これは、コンテンツに含まれていないすべてのコンテンツを削除し、他の条件とともにテーブルを保持するクエリです。

DELETE f
    FROM   field_data_body f
           INNER JOIN node n
                   ON f.entity_id = n.nid
           LEFT JOIN content_to_keep k
                  ON n.nid = k.nid
    WHERE  n.type = 'article'
           AND k.nid IS NULL

では、LIMIT パラメータを追加するにはどのようなオプションが必要ですか。

編集:助けてくれてありがとう、しかしほとんどの答えはwhere in句を使用しています。使用すると、「このバージョンの MySQL は、'LIMIT & IN/ALL/ANY/SOME"subquery をまだサポートしていません」というエラーが表示されます。

4

4 に答える 4

2
DELETE
FROM   field_data_body
WHERE id in (
    SELECT f.id
    FROM   field_data_body f
           INNER JOIN node n
                   ON f.entity_id = n.nid
           LEFT JOIN content_to_keep k
                  ON n.nid = k.nid
    WHERE  n.type = 'article'
           AND k.nid IS NULL)
LIMIT 10; --or whatever you want
于 2013-01-22T17:07:02.937 に答える
2

ORDER BY削除する行を選択するコードの部分にandを追加しLIMIT、それを派生テーブル内に配置して、削除するテーブルに結合します。

DELETE f_del
FROM field_data_body AS f_del
   JOIN
      ( SELECT f.PK                            --- the Primary Key of the table
        FROM   field_data_body f
               INNER JOIN node n
                       ON f.entity_id = n.nid
               LEFT JOIN content_to_keep k
                      ON n.nid = k.nid
        WHERE  n.type = 'article'
               AND k.nid IS NULL
        ORDER BY some_column
        LIMIT 100
      ) AS tmp
      ON tmp.PK = f_del.PK ; 
于 2013-01-22T17:13:35.830 に答える
0

多分あなたを正しい方向に導くために:

.... WHERE IN (SELECT ... FROM field_data_body WHERE nid IS NULL)

于 2013-01-22T17:04:50.823 に答える
0

別の質問から、次のことができました

DELETE f 
FROM   field_data_body f 
WHERE  f.entity_id IN (SELECT * 
                   FROM   (SELECT f.entity_id 
                           FROM   field_data_body f 
                                  INNER JOIN node n 
                                          ON f.entity_id = n.nid 
                                  LEFT JOIN mbrd_delete_nodes_to_keep k 
                                         ON n.nid = k.nid 
                           WHERE  n.type = 'forum' 
                                  AND k.nid IS NULL 
                                  AND f.entity_type = 'node' 
                           LIMIT  1) AS t) 
于 2013-01-22T20:05:48.417 に答える