0

連絡先テーブルとaccounts_contacts結合テーブルを使用して、MySQLで重複したクリーンアップクエリを実行しようとしています。クエリをSELECTクエリとして機能させていますが、それをUPDATEにしようとすると、非常に不特定のエラーが発生します。

#1064-SQL構文にエラーがあります。'FROM sugarDB.contacts INNER JOIN(SELECT dupIDs.id FROM(SELECT ct' at line 3)の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

クエリは次のとおりです。

UPDATE ctUpdate  
    SET ctUpdate.deleted = 1 
    FROM sugarDB.contacts AS ctUpdate 
    INNER JOIN (
        SELECT dupIDs.id
        FROM (
            SELECT ctIDs.id
            FROM sugarDB.contacts AS ctIDs 
            INNER JOIN (
                SELECT ctSource.first_name,
                    ctSource.last_name
                FROM sugarDB.contacts AS ctSource
                GROUP BY ctSource.first_name,
                    ctSource.last_name
                HAVING COUNT(*) > 1
                ORDER BY COUNT(*) DESC
            )
            AS ctSource 
            ON ctIDs.first_name = ctSource.first_name 
                AND ctIDs.last_name = ctSource.last_name
        ) 
        AS dupIDs
        LEFT JOIN sugarDB.accounts_contacts AS a2cIDs
        ON dupIDs.id = a2cIDs.contact_id 
        WHERE a2cIDs.id IS NULL
    )
    AS dupIDs
    ON ctUpdate .id = dupIDs.id
;

私は数日間それを注ぎました、そして私はエラーを見つけることができません。どんな助けでも大歓迎です!

4

1 に答える 1

3

MySqlFROMのステートメントには句がありません。UPDATE

代わりに、結合はUPDATE句の一部である必要があります。

UPDATE sugarDB.contacts AS ctUpdate 
    INNER JOIN (
        SELECT dupIDs.id
        FROM (
            SELECT ctIDs.id
            FROM sugarDB.contacts AS ctIDs 
            INNER JOIN (
                SELECT ctSource.first_name,
                    ctSource.last_name
                FROM sugarDB.contacts AS ctSource
                GROUP BY ctSource.first_name,
                    ctSource.last_name
                HAVING COUNT(*) > 1
                ORDER BY COUNT(*) DESC
            )
            AS ctSource 
            ON ctIDs.first_name = ctSource.first_name 
                AND ctIDs.last_name = ctSource.last_name
        ) 
        AS dupIDs
        LEFT JOIN sugarDB.accounts_contacts AS a2cIDs
        ON dupIDs.id = a2cIDs.contact_id 
        WHERE a2cIDs.id IS NULL
    )
    AS dupIDs
    ON ctUpdate .id = dupIDs.id
    SET ctUpdate.deleted = 1 
;
于 2012-08-02T16:33:10.040 に答える