Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
сравнение записи двух таблицы postgresql
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Мне нужен сравнить записи двух таблицы. Структура таблицы похоже. Вот таблицы: CREATE TABLE md2 ( id bigserial NOT NULL, sguid character varying, hard character varying, soft character varying, netid character varying, packnum bigint, ctime timestamp with time zone, tname character varying, vinterval bigint, datevalues integer[], CONSTRAINT md2_pkey PRIMARY KEY (id) ) CREATE TABLE md3 ( id bigserial NOT NULL, sguid character varying, hard character varying, soft character varying, netid character varying, packnum bigint, ctime timestamp with time zone, tname character varying, vinterval bigint, datevalues integer[], CONSTRAINT md3_pkey PRIMARY KEY (id) ) Я примерно так сделал, но результат не то... обновляет поле datevalues один и тот же данными select count(*) as ii into ri from md3 where sguid=new.sguid and soft=new.soft and hard=new.hard and netid=new.netid and tname=new.tname; IF ri.ii > 0 THEN if q.sguid=new.sguid and q.soft=new.soft and q.hard=new.hard and q.netid=new.netid and q.tname=new.tname then update md3 set datevalues = a.datevalues || new.datevalues from md3 a where a.sguid=new.sguid and a.soft=new.soft and a.hard=new.hard and a.netid=new.netid and a.tname=new.tname; end if; ELSE insert into md3 (sguid, hard, soft, netid, packnum, ctime, tname, vinterval, datevalues) values(new.sguid,new.hard,new.soft,new.netid, new.packnum,new.ctime, new.tname, new.vinterval, new.datevalues); END IF; Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 08:40 |
|
||
|
сравнение записи двух таблицы postgresql
|
|||
|---|---|---|---|
|
#18+
Alib, Код: sql 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. как-то так наверное... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 12:46 |
|
||
|
сравнение записи двух таблицы postgresql
|
|||
|---|---|---|---|
|
#18+
Я бы сделал UNION этих записей, а потом посчитал количество строк в результирующем запросе, если = 1, значит равны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 13:28 |
|
||
|
сравнение записи двух таблицы postgresql
|
|||
|---|---|---|---|
|
#18+
Lonepsycho, Я извиняюсь, что задачу не правильно объяснил. Я по русский плохо владею. Общем, если значение вот этих 5 колонок (q.sguid=new.sguid and q.soft=new.soft and q.hard=new.hard and q.netid=new.netid and q.tname=new.tname) равны, то в колонке datevalues надо делать конкатенацию. А если не равно, тогда данные записывать на новою строку. И еще раз извиняюсь!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 07:15 |
|
||
|
сравнение записи двух таблицы postgresql
|
|||
|---|---|---|---|
|
#18+
Slider_spb, Я извиняюсь, что задачу не правильно объяснил. Я по русский плохо владею. Общем, если значение вот этих 5 колонок (q.sguid=new.sguid and q.soft=new.soft and q.hard=new.hard and q.netid=new.netid and q.tname=new.tname) равны, то в колонке datevalues надо делать конкатенацию. А если не равно, тогда данные записывать на новою строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 07:15 |
|
||
|
сравнение записи двух таблицы postgresql
|
|||
|---|---|---|---|
|
#18+
Alib, ну так, с небольшими изменениями используем уже имеющиеся код Код: sql 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. как-то так. при условии, что ни один из этих пяти полей не содержит значения NULL; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 13:45 |
|
||
|
сравнение записи двух таблицы postgresql
|
|||
|---|---|---|---|
|
#18+
Alibесли значение вот этих 5 колонок (q.sguid=new.sguid and q.soft=new.soft and q.hard=new.hard and q.netid=new.netid and q.tname=new.tname) равны тут немного собака порылась, не смотря на русский и степень его понимания. бытовое понимание (NULL "равно" NULL)=true. т.к. нормального оператора (скажем "is") для такого понимания не существует, в ПЖ используется "псевдооператор" IS NOT DISTINCT FROM или "математическое понимание (NULL "=" NULL) IS NULL в каком из двух смыслов -- бытовом ("совпадает") или математическом ("=") вам надо сравнивать 5 полей ? и да, из за того , что IS [NOT] DISTINCT FROM не умеет (не умел) пользоваться подходящими индексами его лучше расписывать по операторно. для множества полей это немного скучно Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 14:46 |
|
||
|
сравнение записи двух таблицы postgresql
|
|||
|---|---|---|---|
|
#18+
qwwq, в данном случае, имеется сильные подозрения, что индексов там только один на таблицу (id), посему из дистинкт фром, думаю, подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:12 |
|
||
|
сравнение записи двух таблицы postgresql
|
|||
|---|---|---|---|
|
#18+
Lonepsycho, ДВС!!! Спасибо за помощь!!! Все нормально работает, но когда обновляет записывает личные записи. Например, место одного конкатенации делает 4 конкатенации. в поле должно было 2 элемента, а там 5 элемент. Еще раз спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 15:30 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39348780&tid=1996862]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
161ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 274ms |
| total: | 530ms |

| 0 / 0 |
