как отобразить два запроса в одной таблице mysql - PullRequest
0 голосов
/ 17 апреля 2020

Таблица 1: rm

create table rm(rcod int(5) primary key, qty int(5));

Таблица 2: cs

create table cs(cscod int(5)primary key, qty int(5));

Таблица 3: окончательная

create table final(icod int(5) primary key, qty int(5));

Таблица 4: cmbine

create table cmbine(icod int(5),rcod int(5),rmu int(5),cscod int(5),csu int(5));

Теперь вставка значений:

insert into rm values(1,10);
insert into rm values(2,20);

insert into cs values(1,20);
insert into cs values(2,10);

    insert into final values(1,50);

insert into cmbine values(1,1,1,2,5);
insert into cmbine values(1,1,20,1,2);

Теперь я хочу получить результаты, которые приходят из следующих двух запросов, я хочу объединить столбцы и сделать его одним. Запрос 1:

select rcod, 
    qty 
from rm 
where rcod in (select rcod 
               from cmbine 
               where icod = 1);

Запрос 2:

select cscod,
    qty 
from cs 
where cscod in (select cscod 
                from cmbine 
                where icod = 1);

Я думал, что это может помочь, но я получаю ошибку.

 select cmbine.icod,
        cmbine.rcod,
        rm.qty,
        (rm.qty*cmbine.rmu),
        cmbine.cscod,
        cs.qty,
        cmbine.csq,
        (cs.qty * cmbine.csq) 
    from rm,
        cs,
        cmbine 
    where rcod in (select rcod 
                   from cmbine 
                   where icod=1) 
        and cscod in (select cscod 
                      from cmbine 
                      where icod=1)
;

Надеюсь, теперь информация достаточно.

Спасибо!

Как мне это сделать?

1 Ответ

0 голосов
/ 17 апреля 2020

@ RidamJain Чтобы получить результаты обоих запросов в одном наборе результатов, используйте UNION, например:

select icod, 
    qty 
from cs 
where icod in (select distinct cscod 
               from cmbine 
               where icod=100)

UNION

select icod, 
    qty 
from rm 
where rcod in (select distinct rscod 
               from cmbine 
               where icod=100)

Я не думаю, что вам также нужно иметь подзапросы. Вот как бы вы сделали это без подзапросов:

select cs.icod, 
    cs.qty 
from cs
JOIN cmbine AS cm ON cm.cscod = cs.icod
    AND cm.icod = 100
GROUP BY cs.icod

UNION

select rm.icod, 
    rm.qty 
from rm
JOIN cmbine AS cm ON cm.rscod = rm.rcod
    AND cm.icod = 100
GROUP BY rm.icod

, если вам нужно определить, какой набор результатов приходит из какого запроса, вот как вы это сделаете:

select 'First Query' AS result_source,
    cs.icod, 
    cs.qty 
from cs
JOIN cmbine AS cm ON cm.cscod = cs.icod
    AND cm.icod = 100
GROUP BY cs.icod

UNION

select 'Second Query' AS result_source,
    rm.icod, 
    rm.qty 
from rm
JOIN cmbine AS cm ON cm.rscod = rm.rcod
    AND cm.icod = 100
GROUP BY rm.icod

РЕДАКТИРОВАТЬ: поскольку пояснение было добавлено к первоначальному вопросу, здесь приведена очищенная версия запроса, которая должна дать вам запрошенные результаты. Следует отметить одну вещь: в определении для cmbine вы указали последний столбец как csu, но в запросе он указан как csq. Я взял SQL сценарии и смоделировал запрос в sql fiddle .

Вот окончательная версия запроса:

SELECT `cmbine`.`icod`,
    `cmbine`.`rcod`,
    `rm`.`qty`,
    (`rm`.`qty` * `cmbine`.`rmu`),
    `cmbine`.`cscod`,
    `cs`.`qty`,
    `cmbine`.`csq`,
    (`cs`.`qty` * `cmbine`.`csq`) 
FROM `cmbine`
JOIN `cs` ON `cs`.`cscod` = `cmbine`.`cscod`
JOIN `rm` ON `rm`.`rcod` = `cmbine`.`rcod`
WHERE `cmbine`.`icod` = 1;

Если это все еще не дает вам того, что вы хотите, просто дайте мне некоторые разъяснения относительно того, что вы хотите, и я сделаю все возможное, чтобы помочь.

Надеюсь, это поможет!

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