Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 27.10.2019
Сообщений: 17

Не получается преобразовать SELECT в UPDATE

29.06.2021, 10:43. Показов 1232. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте! Мне нужно преобразовать SELECT в UPDATE так, чтобы в NULL_id_МНН занеслись данные из id_МНН

SELECT выводит те наименования, у которых МНН = NULL

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 SELECT DISTINCT ON(dn.title)
 dn.title AS торговое_наименование,
 dtypes.drug_trade_name_id AS id_торгового_наименования,
 dtypes2.inn_id AS id_МНН,
 dtypes.inn_id AS NULL_id_МНН
  FROM  drug_trade_names dn
   INNER JOIN drug_types dtypes   
            ON  dn.id = dtypes.drug_trade_name_id
   INNER JOIN drug_types dtypes2 
            ON  dn.id = dtypes2.drug_trade_name_id
  WHERE
        dtypes.inn_id IS NULL
      AND
        dtypes2.inn_id IS NOT NULL
  ORDER BY dn.title
UPDATE выдаёт ошибку: "имя таблицы "drug_types" указано больше одного раза"

SQL
1
2
3
4
5
6
7
8
9
10
11
UPDATE drug_types
 SET  drug_types.inn_id = dt2.inn_id
 FROM  drug_types 
  INNER JOIN drug_types   
            ON  drug_trade_names.id = drug_types.drug_trade_name_id
    INNER JOIN drug_types dt2  
            ON  drug_trade_names.id = dt2.drug_trade_name_id
WHERE
       drug_types.inn_id IS NULL
     AND
       dt2.inn_id IS NOT NULL
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.06.2021, 10:43
Ответы с готовыми решениями:

Как обвернуть With CTE SELECT в UPDATE FROM SELECT?
-----надо продать n штук declare @to_sale table(itemid int,qty int) insert into @to_sale select 1,35 union all select 2,36 ...

Не получается сделать Update (Update requires a valid InsertCommand)
Не получается сделать Update выдаёт ошибку, что делаю не так? В таблице только одно поле, оно строковое. public void...

UPDATE + SELECT
Привет всем!!! Имеем БД на SQL Compact 3.5 Кто знает поддерживается ли в этой базе запросы типа: UPDATE Медикаменты SET Ostatok =...

3
Модератор
 Аватар для D1973
9929 / 6466 / 2457
Регистрация: 21.01.2014
Сообщений: 27,422
Записей в блоге: 3
29.06.2021, 10:55
Очень мне интересно, откуда секция FROM в запросе UPDATE?
0
1267 / 980 / 385
Регистрация: 02.09.2012
Сообщений: 3,027
29.06.2021, 21:41
Цитата Сообщение от D1973 Посмотреть сообщение
Очень мне интересно, откуда секция FROM в запросе UPDATE?
Это расширение postgresql - так можно. Иногда очень удобно, сокращает запись.

По существу вопроса:
начальный запрос относительно двух dtypes вообще не понятен, что вы получаете в результат?? будет какая-то декартова мешанина из отдельных записей dtypes, которые DISTINCT'ом вы как-то пытаетесь сгруппировать. Данный запрос неправильно написан и привести его к UPDATE невозможно.

Если я правильно уловил логику, то есть drug_trade_names и drug_types, которые связаны отношением один ко многим через drug_trade_names.id = drug_types.drug_trade_name_id. В drug_type есть много записей, соответствующих одной записи drug_trade_names, у которых то проставлены значения inn_id, то не проставлены (IS NULL). И, судя по всему, вы хотите восстановить статус кво и проставить отсутствующий inn_id у всех записей и взять вы этот inn_id хотите у тех же самых записей с таким же drug_trade_name_id. Все бы хорошо и так вроде уже понятнее, но возникает проблема, что проставленный inn_id может быть разный у одинаковых drug_trade_name_id. Например, кто-то ошибся при вводе данных. И возникают вопросы. Из всех присутствующих записей, как определить, какой из inn_id правильный и именно его надо брать для проставления отсутствующих?? А может для drug_type_name_id вообще ни одного правильного inn_id не проставлено, как его определить тогда??

SQL
1
SELECT DISTINCT dt.drug_trade_name_id, dt.inn_id FROM drug_types dt
Если все уникально и нет разных inn_id для одного drug_trade_name_id, а также для каждого drug_trade_name_id есть хотя бы один правильный inn_id, то тогда можно так

SQL
1
2
3
UPDATE drug_types AS dt
SET inn_id = (SELECT DISTINCT inn_id FROM drug_types AS dt2 WHERE dt.drug_trade_name_id=dt2.drug_trade_name_id AND dt2.inn_id IS NOT NULL)
WHERE inn_id IS NULL;
1
Модератор
 Аватар для D1973
9929 / 6466 / 2457
Регистрация: 21.01.2014
Сообщений: 27,422
Записей в блоге: 3
30.06.2021, 04:05
Цитата Сообщение от grgdvo Посмотреть сообщение
Это расширение postgresql - так можно.
Буду знать, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.06.2021, 04:05
Помогаю со студенческими работами здесь

UPDATE из SELECT
Есть запрос который выводит результат (через 6 таблиц) col1 col2 1 2 1 5 Как скопировать значения из col2 в col1?

SELECT в UPDATE
Добрый день. Есть таблица order Надо найти все строки где order_status_id не равно 5, и у этих строк значение столбца timer...

Update select deleted
Пожалуйста подскажите как записать команды Update select deleted, по учебнику есть пример . но он с SQL менеджер базой данных ,а я с...

SELECT , JOIN в UPDATE
Здравствуйте, есть запрос на выборку з бд айдишиников опеределенных отелей SELECT DISTINCT `ho`.`hotel_id` FROM `hotel` AS `ho` ...

UPDATE JOIN SELECT
Добрый вечер Знаю как сделать болеем менее правильно с SELECT SELECT * FROM oc_product JOIN oc_product_description ON...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru