0

質問;

以下の MySQL クエリでは、ConnectionID のリストを生成する内部クエリが 34 個の ConnectionID を返します。次に、更新として 2 つのクエリを一緒に実行すると、クエリ結果は 14 行のみが影響を受けたことを示しました。UPDATE 関数がどのように間違っているかについての私の理解は間違っていますか?

ノート;

Connections.PartnerID が Partners.PartnerID と等しい特定の接続について、Partners テーブルの DefaultUserType が接続テーブルの RoleID と等しくなるように、データベースを更新しようとしています。

クエリ;

    UPDATE Connections
    LEFT JOIN Partners
        ON Connections.PartnerID = Partners.PartnerID
SET Connections.RoleID = Partners.DefaultUserType
WHERE
    ConnectionID IN(
        SELECT
            sub_qu_1.ConnectionID
        FROM
            (
                SELECT DISTINCT
                    Connections.ConnectionID,
                    Connections.MemberID,
                    Connections.FriendID,
                    Connections.RoleID,
                    Partners.DefaultUserType,
                    IF(Connections.RoleID = Partners.DefaultUserType,0,1)AS not_equal
                FROM
                    Connections
                LEFT JOIN Contacts ON Connections.FriendID = Contacts.EEID
                LEFT JOIN Partners ON Contacts.PartnerID = Partners.PartnerID
                WHERE
                    Partners.DefaultUserType NOT IN (28,29,30)
            )AS sub_qu_1
        WHERE
            not_equal = 1
        AND DefaultUserType IS NOT NULL
    )
4

1 に答える 1

0

何百万ものレコードがないことを願っています!Partners に記録しない場合は、Coalesce(val,0) で 0 を設定します。

    UPDATE Connections
SET Connections.RoleID = coalesce((select Partners.DefaultUserType FROM Partners WHERE Connections.PartnerID = Partners.PartnerID LIMIT 1),0)
WHERE
ConnectionID IN(
    SELECT
        sub_qu_1.ConnectionID
    FROM
        (
            SELECT DISTINCT
                Connections.ConnectionID,
                Connections.MemberID,
                Connections.FriendID,
                Connections.RoleID,
                Partners.DefaultUserType,
                IF(Connections.RoleID = Partners.DefaultUserType,0,1)AS not_equal
            FROM
                Connections
            LEFT JOIN Contacts ON Connections.FriendID = Contacts.EEID
            LEFT JOIN Partners ON Contacts.PartnerID = Partners.PartnerID
            WHERE
                Partners.DefaultUserType NOT IN (28,29,30)
        )AS sub_qu_1
    WHERE
        not_equal = 1
    AND DefaultUserType IS NOT NULL
)

訂正しました!

于 2013-04-19T10:59:45.087 に答える