powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как правильно написать update?
14 сообщений из 14, страница 1 из 1
как правильно написать update?
    #39159078
Viacheslav_mihalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброй ночи!

В таблице TAG_IDS находятся уникальные записи по полю NAME

А в таблице TAGS эти же NAME - не уникальны (дублируются).

Задача: в TAGS.TAG_ID записать TAG_IDS.ID, где TAGS.NAME = TAG_IDS.NAME

описание таблиц:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
CREATE TABLE "TAGS"
(
  "ID" bigint NOT NULL DEFAULT nextval('"TAGS_seq"'::regclass),
  "NAME" character varying(256) NOT NULL,
  "DOCTOR_TYPE_ID" integer,
  "DOCTOR_ID" bigint,
  "IS_PRINT" boolean,
  "TAG_ID" bigint,
  CONSTRAINT "TAGS_pkey" PRIMARY KEY ("ID"),
  CONSTRAINT "DOCTOR_ID2" FOREIGN KEY ("DOCTOR_ID")
      REFERENCES "DOCTORS" ("ID") MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT "DOCTOR_TYPE_ID3" FOREIGN KEY ("DOCTOR_TYPE_ID")
      REFERENCES "DOCTOR_TYPE_IDS" ("ID") MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT positive_doctor_id CHECK ("DOCTOR_ID" > 0),
  CONSTRAINT positive_doctor_type_id CHECK ("DOCTOR_TYPE_ID" > 0)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "TAGS"
  OWNER TO postgres;

-- Index: duplicate__name__doctor_id

-- DROP INDEX duplicate__name__doctor_id;

CREATE UNIQUE INDEX duplicate__name__doctor_id
  ON "TAGS"
  USING btree
  ("NAME" COLLATE pg_catalog."default", "DOCTOR_ID");

-- Index: duplicate__name__doctor_type_id

-- DROP INDEX duplicate__name__doctor_type_id;

CREATE UNIQUE INDEX duplicate__name__doctor_type_id
  ON "TAGS"
  USING btree
  ("NAME" COLLATE pg_catalog."default", "DOCTOR_TYPE_ID");

-- Index: "fki_DOCTOR_ID2"

-- DROP INDEX "fki_DOCTOR_ID2";

CREATE INDEX "fki_DOCTOR_ID2"
  ON "TAGS"
  USING btree
  ("DOCTOR_ID");

-- Index: "fki_DOCTOR_TYPE_ID3"

-- DROP INDEX "fki_DOCTOR_TYPE_ID3";

CREATE INDEX "fki_DOCTOR_TYPE_ID3"
  ON "TAGS"
  USING btree
  ("DOCTOR_TYPE_ID");



и

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE "TAG_IDS"
(
  "ID" bigint NOT NULL DEFAULT nextval('"TAG_IDS_seq"'::regclass),
  "NAME" character varying(64),
  CONSTRAINT "TAG_IDS_pkey" PRIMARY KEY ("ID"),
  CONSTRAINT unique_tag_ids UNIQUE ("NAME")
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "TAG_IDS"
  OWNER TO postgres;
...
Рейтинг: 0 / 0
как правильно написать update?
    #39159154
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, Viacheslav_mihalich.

Что-от типа
Код: plsql
1.
2.
3.
update tags
   set tag_id = ( select id from tags_ids
                   where name = tags.name );


С уважением, Polesov.
...
Рейтинг: 0 / 0
как правильно написать update?
    #39159159
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

незнаю действительно луче или нет, но мне болше нравится форма
Код: sql
1.
2.
3.
4.
UPDATE tags AS t
SET tag_id = i.id
FROM tags_ids AS i
WHERE i.name = t.name;
...
Рейтинг: 0 / 0
как правильно написать update?
    #39159165
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonepsycho, может быть и лучше, но могу только сказать, что мой запрос выполнится на любом SQL-сервере, а приведенный тобой - нет (на Firebird точно не выполнится). Хотя согласен - форма более лаконичная.
...
Рейтинг: 0 / 0
как правильно написать update?
    #39159190
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov, жаренный питух -- не субд. узбагойтесь.
...
Рейтинг: 0 / 0
как правильно написать update?
    #39159199
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq, огласите весь список пжлста
...
Рейтинг: 0 / 0
как правильно написать update?
    #39159201
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

в питухе рид--коммитеда, кажись, исторически не было. это характеризует разрабов версионника(!), Карл(!), как проф--непригодных рукожопов. привет сибирякову.
...
Рейтинг: 0 / 0
как правильно написать update?
    #39159202
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

Понятно - список состоит из одной позиции.

За сим позвольте откланяться
...
Рейтинг: 0 / 0
как правильно написать update?
    #39159209
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

предпочитаю с каждым разговаривать на ему понятном языке. не верю в один запрос для разных дб. как по мне, так это путь в никуда, потому что так вы обречены на использование судб на максимум 30%.
...
Рейтинг: 0 / 0
как правильно написать update?
    #39159214
Viacheslav_mihalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Polesov и Lonepsycho - спасибо за ответы! Вопрос решен.

Я, видимо, мог бы и сам догадаться, но в 3 часа ночи ничего уже не соображал.
А сделать нужно было срочно.
...
Рейтинг: 0 / 0
как правильно написать update?
    #39159460
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы cлон поддерживал стандартный MERGE...
...
Рейтинг: 0 / 0
как правильно написать update?
    #39160254
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЕсли бы cлон поддерживал стандартный MERGE...
я чо его поддерживать ? он чо -- падает ?


при питуховом snapshot i.e. repeatable read
WITH .. as ( UPDATE ..... RETURNING ...) INSERT .... WHERE {not found}
кажисть вполне себе полноценный мёрж. -- при ошибке вполне себе упадёцца. (по ошибке уровня изоляции)
или я не прав ?
поправьте, чота лень подпризадуматься или потестить.

а для read commited пришлось немного честнее стандартного посмотреть на проблему. написали более трульный
INSERT .... ON CONFLICT [blahblah]... [не тестил пока руками]
кактотаг
...
Рейтинг: 0 / 0
как правильно написать update?
    #39161119
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqя чо его поддерживать ? он чо -- падает ?
Тогда почему ТС его не использует и никто ему это не советует?..
...
Рейтинг: 0 / 0
как правильно написать update?
    #39161127
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovqwwqя чо его поддерживать ? он чо -- падает ?
Тогда почему ТС его не использует и никто ему это не советует?..
1. наверное потому, что он ТС-у тут не нужен
от слова "совсем"

2. наверное потому, что это всем понятно



я бы ещё спросил автора, заради чего они денормализовали табличку. т.е. кроме ид тагов ввели и сами имена тагов. сомнительно догадываюсь -- для сложного поиска по LIKE по тагам, и прочим параметрам. но как--то вот не очевидно, что это нужно делать. т.е. что они хоть что--то тут выигрывают. А вот проиграть можно в удобстве. но поскольку третьего дня мне было лень задавать ТС эти вопросы -- то и на технику апдейта вновь добавленного поля задним числом мне положить. но мердж там не нужен со всей очевидностью. для практикующего кодера это очевидно.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как правильно написать update?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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