Как СОЕДИНИТЬ таблицу с другой таблицей только с одним общим значением - PullRequest
0 голосов
/ 01 мая 2019

У меня есть таблица:

ABC1234    GTR    some information    01/03/07    some information    0.55 
ABC1234    GTR    some information    14/11/18    some information    0.45 
ABC1234    GTR    some information    14/11/18    some information    0.45 
ABC1234    GTR    some information    22/11/18    some information    0.55

и другая таблица:

ABC1234   3   39448.940091 
ABC1234   3   30806.72651    
ABC1234   3   14817.730764 
ABC1234   3   13482.769

Я хочу добавить 4 десятичных значения в конце 2-й таблицы в первую таблицу, нокогда я запускаю свой запрос:

select ta.column1, ta.column2, ta.column3, ta.column4, ta.column5, ta.column6, tb.column3  
from table_a ta,
table_b tb
where ta.column1, = tb.column1
and cd.contract_number = 'ABC1234';

Я хочу закончить с:

ABC1234    GTR    some information    01/03/07    some information    0.55   39448.940091 
ABC1234    GTR    some information    14/11/18    some information    0.45   30806.72651 
ABC1234    GTR    some information    14/11/18    some information    0.45   14817.730764 
ABC1234    GTR    some information    22/11/18    some information    0.55   13482.769

, но я получаю 16 строк данных, где они зацикливаются вокруг table_b и показывают4 значения для каждой строки в table_a

Ответы [ 3 ]

0 голосов
/ 01 мая 2019

Попробуйте,

select ta.column1, ta.column2, ta.column3, ta.column4, ta.column5, ta.column6, tb.column3  
from table_a ta inner join
table_b tb on ta.column1 = tb.column1
where cd.contract_number = 'ABC1234';
0 голосов
/ 01 мая 2019

Согласно столбцу текущей ситуации одна из обеих таблиц имеет одинаковую запись. Если вы соединитесь с этим, то первая строка таблицы один с производством 4 строки с соединением таблицы два. Вот почему вы получаете 16 строк. Таким образом, вы должны создать еще один столбец в обеих таблицах. Оба столбца должны быть уникальными в вашем случае. После этого присоединитесь к базе на новом столбце.

Я добавил в последний раз.

TABLE_A

ABC1234    GTR    some information    01/03/07    some information    0.55   1
ABC1234    GTR    some information    14/11/18    some information    0.45   2
ABC1234    GTR    some information    14/11/18    some information    0.45   3
ABC1234    GTR    some information    22/11/18    some information    0.55   4

TABLE_B

ABC1234   3   39448.940091     1
ABC1234   3   30806.72651      2
ABC1234   3   14817.730764     3
ABC1234   3   13482.769        4

запрос

select ta.column1, ta.column2, ta.column3, ta.column4, ta.column5, ta.column6, tb.column3 from table_a ta, table_b tb where ta.column7 = tb.column4;
0 голосов
/ 01 мая 2019

Таблицы SQL представляют неупорядоченные множества.Упорядочения не существует, если только в столбце не указан порядок.

Я могу предположить, что в первой таблице четвертый столбец предназначен в качестве даты (подсказка: вы должны использовать формат гггг-мм-дд) и что заказыстрокиА во второй таблице они упорядочены по убыванию третьего столбца.

Если это так, вы можете объединить их.Это проще выразить в MySQL 8 +:

select ta.column1, ta.column2, ta.column3, ta.column4, ta.column5, ta.column6, tb.column3  
from (select ta.*,
             row_number() over (partition by column1 order by column4) as seqnum
      from table_a ta
     ) ta join
     (select tb.*,
             row_number() over (partition by column1 order by column3 desc) as seqnum
      from table_b tb
     ) tb
     on ta.column1 = tb.column1 and ta.seqnum = tb.seqnum
where cd.contract_number = 'ABC1234';

Это можно сделать в более ранних версиях, но вычисление seqnum там проще всего сделать с помощью переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...