2

私が受け取っているもの:

[Err] 1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

次のクエリの実行中:

UPDATE account.account
SET STATUS = 'BLOCK'
WHERE
    id IN (
        SELECT
            p.account_id
        FROM
            log.log
        LEFT JOIN player.player p ON (p.id = log.who)
        WHERE
            vnum = 71054
        AND how = 'BUY'
        GROUP BY
            log.`who`
        HAVING
            COUNT(log.who) > 2
        LIMIT 10
    );

MySQLが実行できるようにこのクエリを書き直す可能性はありますか?

4

1 に答える 1

4

解決策は、を使用するのではなく、サブクエリに対して結合することIN()です。は、制限されたサブクエリから一致するIDのINNER JOIN行のみを返します。その後、句なしでaccount実行することが可能です。UPDATEWHERE

Update 
  account.account AS account
  INNER JOIN (
        SELECT
            p.account_id
        FROM
            log.log
            LEFT JOIN player.player p ON (p.id = log.who)
        WHERE
            vnum = 71054
            AND how = 'BUY'
        GROUP BY log.`who`
        HAVING COUNT(log.who) > 2
        LIMIT 10 
   ) subq ON account.id = subq.id
SET STATUS='BLOCK'

変更される行を確認するには、SELECT最初に次を使用します。

SELECT
  account.*
FROM 
  account.account
  INNER JOIN (
            SELECT
                p.account_id
            FROM
                log.log
                LEFT JOIN player.player p ON (p.id = log.who)
            WHERE
                vnum = 71054
                AND how = 'BUY'
            GROUP BY log.`who`
            HAVING COUNT(log.who) > 2
            LIMIT 10 
       ) subq ON account.id = subq.id
于 2012-09-29T20:56:09.267 に答える