powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не получается правильно написать запрос вида update что-то set = select from select
5 сообщений из 5, страница 1 из 1
Не получается правильно написать запрос вида update что-то set = select from select
    #39615661
sopsop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Пытаюсь написать запрос для работы с БД 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
Не получается правильно написать запрос вида update что-то set = select from select
    #39615666
sopsop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного посимпатичнее напишу запрос

Код: 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
Не получается правильно написать запрос вида update что-то set = select from select
    #39615667
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Не получается правильно написать запрос вида update что-то set = select from select
    #39615668
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И никаких коррелированных подзапросов быть не должно!
...
Рейтинг: 0 / 0
Не получается правильно написать запрос вида update что-то set = select from select
    #39615682
sopsop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ!
У меня получилось

Код: 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
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не получается правильно написать запрос вида update что-то set = select from select
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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