ОБНОВЛЕНИЕ MYSQL с помощью LEFT JOIN
Вопрос;
В приведенном ниже MySQL-запросе внутренний запрос, который создает список ConnectionID, возвращает 34 ConnectionID. Когда я затем запустил два запроса вместе в качестве обновления, результат запроса показал, что затронуто только 14 строк. Мое понимание того, как функция ОБНОВЛЕНИЯ неверна?
Заметки;
Я пытаюсь обновить свою базу данных так, чтобы DefaultUserType в таблице Partners был равен RoleID в таблице соединений для любого данного соединения, где Connections.PartnerID равен Partners.PartnerID.
Запрос;
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
)
1 ответ
Я надеюсь, что у вас нет миллионов записей! с Coalesce(val,0) вы устанавливаете 0, если не записываете в Partners
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
)
Исправленный!