0

ローカルで次のことを試しても、結果もエラーもありません。

 select
  a,
  bunch,
  of,
  fields
    from import where id in (
        SELECT distinct t1.id
        FROM import t1 inner join import t2 
        on t1.programid = t2.programid and t1.sku = t2.sku 
        where t1.lastupdated < t2.lastupdated   
    )

このクエリは、古いレコードをコピーしてアーカイブするクエリの一部です。これは、移動する必要があるデータをフェッチする部分です。

cpanel の phpmydmin ですべてを実行すると、何も起こらず、エラーもレコードもコピーされません。

100 万を超えるレコードがあり、2/3 をアーカイブする必要があります。phpmyadmin を備えた cpanel を使用する必要がありますが、そのようなクエリを実行するのは不適切だと思います。「insert into」と組み合わせると、上記のステートメントは phpmyadmin セッションを 2 時間ロックアップしますが、レコードはコピーされません。

4

1 に答える 1

1

phpmyadminに、一部のバージョンのサブセレクトを使用したクエリでこれを実行させました。

ただし、このSQLを試してください。同じように動作するはずですが、より効率的である可能性があります。

SELECT a, bunch, of, fields
    FROM import 
    INNER JOIN (SELECT distinct t1.id
        FROM import t1 inner join import t2 
        on t1.programid = t2.programid and t1.sku = t2.sku 
        where t1.lastupdated < t2.lastupdated ) Sub1
    ON import.id = Sub1.id

各programid/skuの最新の最終更新がないレコードを取得するために、以下のコードを追加するように編集されました

SELECT a, bunch, of, fields
FROM import 
LEFT OUTER JOIN (SELECT programid, sku, MAX(lastupdated) AS lastupdated FROM import GROUP BY programid, sku) Sub1
ON import.programid = Sub1.programid AND import.sku = Sub1.sku AND import.lastupdated = Sub1.lastupdated
WHERE Sub1.programid IS NULL
于 2012-12-10T09:59:35.180 に答える