powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / сравнение двух таблиц
13 сообщений из 13, страница 1 из 1
сравнение двух таблиц
    #33341088
puzzle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
есть ДВЕ таблице структуры похожие:
Табл1: датастамп1, поле1.
Табл2: датастамп2, поле2.
Необходимо:
или вывести различия в поле 1 по дате
или вывести что типа токаго:
Код: plaintext
1.
2.
3.
4.
5.
датастам1 | поле1 | поле2  (если поле1=поле2) 
датастам1 | поле1 | _____  (если в табл2 нет записи по данной дате)   
датастам2 | _____ | поле2
...
датастам1 | поле1 | поле2
         |______ | поле2 (если по одной дате два значения)

Заранее благодарен, Павел.
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33341185
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XM, где ты?
А то меня снова тянет в сохраненки на питоне :-)
Вообще FULL JOIN -ом пахнет. Только с "|______ | поле2 (если по одной дате два значения) " загвоздка.
Может приведете пример с данными в таблицах и в результате гипотетического запроса, а то не совсем понятно (мне).
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33341901
puzzle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
             Т1   Т2
 12 . 02 . 2005    Д     1 
 12 , 02 , 2005    _     2 
 14 , 02 , 2005    Д    _
 15 , 02 , 2005    _     2 
 16 , 02 , 2005    Д    _
 16 , 02 , 2005    О    _

что-то типа того.
Заранее благодарен.
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33342170
puzzle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробую что-то типа такого, только нет пустых значений:
Код: plaintext
1.
2.
3.
4.
  SELECT 
   s.date , s.signal,  hs."SIGNAL"
  FROM 
   "NT_Signal" s full join "NT_hist_sig" hs on (date(s.date) = date(hs."TTS"))
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33342230
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не боишься сохраненок на перле/питоне (притормаживают), могу наваять.
(Что-то на подобие " интересная задачка ")
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33342340
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведите пожалуйста 1) create table, 2) insert показательного набора данных, и 3) что должен возвращать select для этих данных.
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33342515
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может так?

create table t1 ( id integer ,f text);
create table t2 ( id integer ,f text);

insert into t1 VALUES(1,'1T1');
insert into t1 VALUES(2,'2T1');
insert into t1 VALUES(3,'3T1');
insert into t1 VALUES(4,'4T1');
insert into t1 VALUES(5,'5T1');

insert into t2 VALUES(1,'1T2');
insert into t2 VALUES(2,'2T2');
insert into t2 VALUES(6,'6T2');
insert into t2 VALUES(5,'5T2');

select t1.id,t1.f,t2.f from t1 left join t2 using(id)
union
select t2.id,t1.f,t2.f from t2 left join t1 using(id)

в результате:

id f f_1
---------------
1 1T1 1T2
2 2T1 2T2
3 3T1 Null
4 4T1 Null
5 5T1 5T2
6 Null 6T2
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33342518
puzzle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача стоит в сравнении и выявлении различия между двух таблиц.
Код: plaintext
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.
CREATE TABLE "public"."hist_sig" (
  "RECID" SERIAL, 
  "TTS" TIMESTAMP , 
  "PRICE" DOUBLE PRECISION, 
  "SIGNAL" VARCHAR( 2 ), 
) WITH OIDS;

CREATE TABLE "public"."Signal" (
  "ID_Signal" BIGSERIAL, 
  "date" TIMESTAMP WITHOUT TIME ZONE, 
  "price" DOUBLE PRECISION, 
  "signal" VARCHAR( 2 )
) WITH OIDS;

insert into "Signal" ("date", "price","signal")
VALUES ('20050302 12:00:00',  12 . 5 , L)
insert into "Signal" ("date", "price","signal")
VALUES ('20050302 12:00:00',  12 . 5 , S)
insert into "Signal" ("date", "price","signal")
VALUES ('20050303 12:00:00',  12 . 5 , S)
insert into "Signal" ("date", "price","signal")
VALUES ('20050305 12:00:00',  12 . 5 , H)

insert into "hist_sig" ("TTS", "price","signal")
VALUES ('20050302 12:00:00',  12 . 5 , L)
insert into "hist_sig" ("TTS", "price","signal")
VALUES ('20050304 12:00:00',  12 . 5 , D)
insert into "hist_sig" ("TTS", "price","signal")
VALUES ('20050304 12:00:00',  12 . 5 , R)
Что хотелось бы в идеале получить (Т.Е. соответствие по дате(возможно до минут) и по сигналам):
Код: plaintext
1.
2.
3.
4.
5.
6.
----------из signal--------     -----из hist_sig-----------
'20050302 12:00:00',  12 . 5 , L,  12 . 5 , '20050302 12:00:00'
'20050302 12:00:00',  12 . 5 , S, ___, _________________
'20050303 12:00:00',  12 . 5 , S, ___, _________________
___________________, ____, D,  12 . 5 , '20050304 12:00:00'
___________________, ____, R,  12 . 5 , '20050304 12:00:00'
'20050305 12:00:00',  12 . 5 , H, ___, _________________
Допер до join получается но не то (не получается пустых полей справа):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  SELECT  s.date , s.signal, hs."TTS", hs."SIGNAL"
  FROM
  (  SELECT  s.date , s.signal
  FROM "NT_Signal" s
  WHERE  s."ID_TS" =  61 ) as s 
 LEFT JOIN 
 ( SELECT hs."TTS",hs."SIGNAL"   
   FROM "NT_hist_sig" hs) as hs 
  on date(s.date) = date(hs."TTS")
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33342587
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select date(s."date"), s."signal", s."price",
        date(hs."TTS"),  hs."SIGNAL", hs."PRICE"
from "Signal" s
	FULL OUTER JOIN
      "hist_sig" hs
  on ( date(s."date") = date(hs."TTS") and hs."SIGNAL" = s."signal" )
order by  1 ;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
     date    | signal | price |    date    | SIGNAL | PRICE
------------+--------+-------+------------+--------+-------
   2005 - 03 - 02  | L      |   12 . 5  |  2005 - 03 - 02  | L      |   12 . 5 
   2005 - 03 - 02  | S      |   12 . 5  |            |        |
   2005 - 03 - 03  | S      |   12 . 5  |            |        |
   2005 - 03 - 05  | H      |   12 . 5  |            |        |
             |        |       |  2005 - 03 - 04  | D      |   12 . 5 
             |        |       |  2005 - 03 - 04  | R      |   12 . 5 
???
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33342693
puzzle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем огромное спасибо получилось!)))))))
Код: plaintext
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.
SELECT
  s.date , s.signal,s.price, hs."TTS", hs.SIG, hs."PRICE"
FROM
  (SELECT  s.date , s.signal,s.price
  FROM "NT_Signal" s
  WHERE  s."ID_TS" =  61 ) as s
LEFT JOIN
  (SELECT hs."TTS",
    CASE
      WHEN hs."SIGNAL" =  1  THEN 'L'
      WHEN hs."SIGNAL" =  10  THEN 'SL'
      WHEN hs."SIGNAL" =  102  THEN 'SL-S'
      WHEN hs."SIGNAL" =  2  THEN 'S'
      WHEN hs."SIGNAL" =  20  THEN 'SS'
      WHEN hs."SIGNAL" =  201  THEN 'SS-L'
      ELSE 'OTHER'
    END as SIG,
    hs."PRICE"
  FROM "NT_hist_sig" hs
  WHERE
    hs."SIGNAL" <>  0 
    and hs."ID_TS"= 43  and "ID_PROG" =  46 ) as hs
  ON date(s.date) = date(hs."TTS")
UNION
SELECT
  s.date , s.signal,s.price, hs."TTS", hs.SIG,hs."PRICE"
FROM
  (SELECT hs."TTS",
     CASE
       WHEN hs."SIGNAL" =  1  THEN 'L'
       WHEN hs."SIGNAL" =  10  THEN 'SL'
       WHEN hs."SIGNAL" =  102  THEN 'SL-S'
       WHEN hs."SIGNAL" =  2  THEN 'S'
       WHEN hs."SIGNAL" =  20  THEN 'SS'
       WHEN hs."SIGNAL" =  201  THEN 'SS-L'
       ELSE 'OTHER'
     END as SIG,
     hs."PRICE"
  FROM "NT_hist_sig" hs
  WHERE
    hs."SIGNAL" <>  0 
    and hs."ID_TS"= 43  and "ID_PROG" =  46 ) as hs
   LEFT JOIN
  (SELECT  s.date , s.signal, s.price
  FROM "NT_Signal" s
  WHERE  s."ID_TS" =  61 ) as s
   on  date(hs."TTS") = date(s.date)
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33342718
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
  SELECT ....
   FROM A LEFT JOIN B on (...)
  UNION
  SELECT ....
   FROM B LEFT JOIN A on (...)
эквивалентно
Код: plaintext
 SELECT ....  FROM A FULL JOIN B on (...)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33342745
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>SELECT ....
FROM A LEFT JOIN B on (...)
UNION
SELECT ....
FROM B LEFT JOIN A on (...)
>эквивалентно

> SELECT .... FROM A FULL JOIN B on (...)

Не совсем.
В этом случае вернутся набор имеющий все поля
т.е. для каждой таблице в обьединении будет свой набор полей.

в первом случае есть возможность обьединить данные из различных таблиц под одним полем...
...
Рейтинг: 0 / 0
сравнение двух таблиц
    #33342791
puzzle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select date(s."date"), s."signal", s."price",
        date(hs."TTS"),  hs.SIG, hs."PRICE"
from (SELECT  s.date , s.signal, s.price
  FROM "NT_Signal" s
  WHERE  s."ID_TS" =  61 ) as s
	FULL OUTER JOIN
      (SELECT hs."TTS",
     CASE
       WHEN hs."SIGNAL" =  1  THEN 'L'
       WHEN hs."SIGNAL" =  10  THEN 'SL'
       WHEN hs."SIGNAL" =  102  THEN 'SL-S'
       WHEN hs."SIGNAL" =  2  THEN 'S'
       WHEN hs."SIGNAL" =  20  THEN 'SS'
       WHEN hs."SIGNAL" =  201  THEN 'SS-L'
       ELSE 'OTHER'
     END as SIG,
     hs."PRICE"
  FROM "NT_hist_sig" hs
  WHERE
    hs."SIGNAL" <>  0 
    and hs."ID_TS"= 43  and "ID_PROG" =  46 ) as hs
  on ( date(s."date") = date(hs."TTS") and hs.SIG = s."signal" )
order by  1 ,  4 ;
Результат такой же что и от того большого, ))))
спасибо, но вот еще вопросик, есть ли возможность как- то представить hs."SIGNAL" = 201 THEN 'SS-L' и hs."SIGNAL" = 102 THEN 'SL-S' (для сравнения) в виде двух сигналов,т.к. в другой табл есть сигналы только 4-х типов.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / сравнение двух таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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