Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Как объеденить две таблици в одну


Автор: Valpeza 13.5.2011, 17:54
Есть две заполненные таблицы, имеющие практически эдентичную инфу в каждой записи, разными там являются только id частота назначения с количеством. И как вот их объеденить так чтобы можно было сравнивать эту частоту и количество, тоесть надо чтобы идентичные имена с id = 2 из первой таблици объеденялись с такими же записями но с id=4356 из второй, а частато и кол-во из обеих порождали 4 новых столбца, чтобы сравнивать можно было это ело.  Выглядит это вот так
Перва таблица
Код

CREATE TABLE sde_commons
    (id                             NUMBER(10,0),
    parent_id                      NUMBER(10,0),
    internal_id                    NUMBER(10,0),
    seq                            NUMBER(3,0),
    code                           VARCHAR2(200),
    name                           VARCHAR2(500),
    rate                           NUMBER,
    qnt                            NUMBER,
    unit                           VARCHAR2(20))


вторая

Код

CREATE TABLE std_commons
    (id                             NUMBER(10,0) NOT NULL,
    parent_id                      NUMBER(10,0) NOT NULL,
    internal_id                    NUMBER(10,0),
    seq                            NUMBER(3,0),
    code                           VARCHAR2(200),
    name                           VARCHAR2(500),
    rate                           NUMBER,
    qnt                            NUMBER,
    unit                           VARCHAR2(20))


и та в коотрую данные из первых двух вставить надо
Код


CREATE TABLE sde_as
    (id                             NUMBER(10,0),
    sde_parent_id                  NUMBER(10,0),
    std_parent_id                  NUMBER(10,0),
    seq                            NUMBER(3,0),
    sde_code                       VARCHAR2(200),
    std_code                       VARCHAR2(200),
    name                           VARCHAR2(500),
    sde_rate                       NUMBER(5,4),
    std_rate                       NUMBER(5,4),
    sde_qnt                        NUMBER(5,4),
    std_qnt                        NUMBER(5,4))


Уважаемые специаличты помогите с этим запросом, очень нужен он мне

Автор: Valpeza 13.5.2011, 19:48
хотябы в коком направлении рыть подскажите а, какая там конструкция запроса используется, команда какая-то специальная есть наверняка.... 

Автор: Valpeza 13.5.2011, 20:11
Через этот запрос 
Код

 SELECT std_commons.code,name, rate, qnt,parent_id FROM std_commons     
        WHERE parent_id=4359 
         UNION
SELECT sde_commons.code,name, rate,qnt,  parent_id FROM sde_commons where parent_id=2; 


 он мне одинаковые записи выводит друг под другом,
A01.10.001    диагноз1    1                                      15                                     4359
A01.10.001    диагноз1                                                                                  2
A01.10.002    диагноз 2    1                                      15                                     4359
A01.10.002    диагноз 2                                                                                  2

 сравнивать можно, но не удобно.  А надо чтобы он мне код и имя объеденял, а вот частоту, среднее количество и id номера в отдельных столбцах писал, как бы в одну строчку...
вот как это реализовать?

Автор: boevik 13.5.2011, 20:12
INNER JOIN
связка по имени выглядит так:
Код

select * from std_commons a inner join sde_as b on a.name = b.name

Автор: Valpeza 13.5.2011, 20:14
о, спасибо, попробую поколдовать с этим)

Автор: Valpeza 13.5.2011, 21:19
По средствам этого запроса в принципе получилось именно то что мне надо, но не до конца

Код

 select * from sde_commons a inner join std_commons b on a.name = b.name where a.parent_id=2 and b.parent_id=4359



сейчас получилось две таблицы целеко объеденить, и в каждой строке соответствуют имена и коды из обеих таблиц.  А как сделать ее менее громоздкой, тобишь сгруппировать имена в и коды в каждой строке в одно, а остальные данные оставить как есть.  мне их потом надо будет в таблицу sde_as вставлять. 

Автор: Valpeza 14.5.2011, 18:55
Огромное спасибо, разобрался, на первом наборе таблиц получилось вывести интересующие данные.

Посмотрите пожалуйста вот такую еще ситуацию, есть еще две таблицы, он как и те подобны, вот скрин с оной http://s2.ipicture.ru/uploads/20110514/g6aW66px.jpg  Как вы видите тут некая иерархия получается в медикаментах. Если я пытаюсь объеденить эти две таблицы по средствам вот такого запроса
Код

select  a.parent_id,  b.parent_id , 
        a.pharm_group, 
        a.atx , a.mnn,
        a.rate st_rate, b.rate sd_rate 
                from std_drugs a 
    inner join sde_drugs b  on a.pharm_group = b.pharm_group and b.atx=a.atx and b.mnn=a.mnn
                             where b.parent_id=3 and a.parent_id=4361;


то получаю в ответ пустые колонки
если вводить такой запрос
Код

select  a.parent_id,  b.parent_id , 
        a.pharm_group, 
        a.atx , a.mnn,
        a.rate st_rate, b.rate sd_rate 
                from std_drugs a 
    inner join sde_drugs b  on a.pharm_group = b.pharm_group 
                             where b.parent_id=3 and a.parent_id=4361;

то выводит только фарм группу и частоту с parent_id  Ну и соответственно если в запросе задать не фарм группу а mnn например, то будут выводиться только медикаменты, а фарм группа и атх будут пустыми.
каким образом можно обойти эту проблему?  Может еще какая чудесная команда есть или тут структуру запроса как-то хитро менять надо?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)