Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не получается правильно написать запрос вида update что-то set = select from select / 5 сообщений из 5, страница 1 из 1
15.03.2018, 20:51
    #39615661
sopsop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается правильно написать запрос вида update что-то set = select from select
Добрый день! Пытаюсь написать запрос для работы с БД CRM suiteCRM
Упрощенно есть три таблицы:
accounts [id, assigned_user_id] - контрагенты , assigned_iser_id - кто из пользователей ответственный по контрагенту
accounts_contcats [accounts_id,contacts_id] - таблица связи accounts <-> contacts
contacts [id,assigned_user_id] - кто из пользователей ответственный за контакт

Мне надо написать запрос который сделает так, чтобы assigned_user_id для всех записей из таблицы contacts стал равным assigned_user_id из таблицы accounts

Я написал следующее:

Код: sql
1.
2.
3.
4.
5.
6.
7.
UPDATE contacts 
SET contacts.assigned_user_id = (

    SELECT accounts_assigned_user_id
	FROM (SELECT accounts.assigned_user_id AS accounts_assigned_user_id,contacts.assigned_user_id AS contacts_assigned_user_id, contacts.id AS contact_id FROM accounts INNER JOIN accounts_contacts ON accounts.id = accounts_contacts.account_id INNER JOIN contacts ON accounts_contacts.contact_id=contacts.id WHERE accounts.assigned_user_id <> contacts.assigned_user_id) AS myalias1
	WHERE contacts.id = contact_id		
) ;



Если я делаю симмуляцию запроса в phpmyadmin, судя по количеству обработаных записей, запрос отрабатывает правильно.
Однако, когда я выполняю запрос, по факту он обрабатывает больше строк, чем я ожидал и делает примерно следующее:

Для тех contacts где assigned_user_id не был равен соответствующему из таблицы accounts он проставляет assigned_user_id из таблицы accounts, как я и хотел, но
если assigned_user_id в обеих таблицах был одинаковым, в таблице contacts он его затирает, делает пустым.

Может ли кто-нибудь подсказать, в чем моя ошибка и почему симуляция запроса работает отлично от живого выполнения.

Заранее огромное спасибо!
...
Рейтинг: 0 / 0
15.03.2018, 21:00
    #39615666
sopsop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается правильно написать запрос вида update что-то set = select from select
Немного посимпатичнее напишу запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
UPDATE contacts 
SET contacts.assigned_user_id = (

SELECT accounts_assigned_user_id FROM (SELECT	 
accounts.assigned_user_id AS accounts_assigned_user_id,
contacts.assigned_user_id AS contacts_assigned_user_id, 
contacts.id AS contact_id FROM accounts 
INNER JOIN accounts_contacts ON accounts.id = accounts_contacts.account_id 
INNER JOIN contacts ON accounts_contacts.contact_id=contacts.id 
WHERE accounts.assigned_user_id <> contacts.assigned_user_id) AS myalias1
	WHERE contacts.id = contact_id		
) ;
...
Рейтинг: 0 / 0
15.03.2018, 21:02
    #39615667
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается правильно написать запрос вида update что-то set = select from select
https://dev.mysql.com/doc/refman/5.7/en/update.html Multiple-table syntax:
Код: sql
1.
2.
3.
UPDATE [LOW_PRIORITY] [IGNORE] table_references
    SET assignment_list
    [WHERE where_condition]
...
Рейтинг: 0 / 0
15.03.2018, 21:03
    #39615668
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается правильно написать запрос вида update что-то set = select from select
И никаких коррелированных подзапросов быть не должно!
...
Рейтинг: 0 / 0
15.03.2018, 22:17
    #39615682
sopsop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается правильно написать запрос вида update что-то set = select from select
Спасибо за ответ!
У меня получилось

Код: sql
1.
2.
3.
4.
UPDATE  accounts a
INNER JOIN accounts_contacts b ON a.ID = b.account_id
INNER JOIN contacts c ON b.contact_id = c.id
SET c.assigned_user_id = a.assigned_user_id
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не получается правильно написать запрос вида update что-то set = select from select / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]