как сравнить результат 2 запросов и получить значения, которые соответствуют - PullRequest
0 голосов
/ 12 апреля 2019

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

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

SELECT
   `model`,`size`,`color_temp`,`lumen_out`, SUM(`order_qty`),
   CONCAT(`model`,`size`,`color_temp`,`lumen_out`) AS concatenate 
FROM `sales` 
GROUP BY  concatenate, `model`, `size`, `color_temp`,`lumen_out`
HAVING concatenate IN (
  SELECT CONCAT(`model`,`size`,`color_temp`,`lumen_out`) FROM `pcbs`
)

я хочу получить что-то вроде следующего:

model  size    color  lumen    qty   concatenate   pcb          
LCL       2     30      ML     93    LCL230ML   93072008-2102
LCL       2     35      ML     57    LCL235ML   93072009-2104
LCL       2     40      ML     66    LCL240ML   93072009-2104

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

Зачем вам объединять значения для join? Просто используйте значения как есть.

Итак:

select s.*, p.*
from (select model, size, color_temp, lumen_out, sum(order_qty) as qty
      from sales
      group by model, size, color_temp, lumen_out
     ) s join
     (select model, size, color_temp, lumen_out, sum(order_qty) as qty
      from pcbs
      group by model, size, color_temp, lumen_out
     ) p
     on p.model = s.model and
        p.size = s.size and
        p.color_temp = s.color_temp and
        p.lumen_out = s.lumen_out;

Это также должно иметь лучшую производительность.

Обратите внимание, что в обеих таблицах сохраняются только строки с полным совпадением. Если вы хотите все строк, тогда правильная конструкция будет full join - но MySQL не поддерживает это. Есть альтернативные методы. Ваш вопрос, однако, говорит о том, что вам нужны только совпадающие строки.

0 голосов
/ 12 апреля 2019

Вы можете объединить два «табличных выражения» (которые действуют как таблицы в SELECT), например:

select
  a.*, b.*
from (
  SELECT
    `model`,`size`,`color_temp`,`lumen_out`, SUM(`order_qty`),
    CONCAT(`model`,`size`,`color_temp`,`lumen_out`) AS concatenate 
  FROM `sales` 
  GROUP BY  concatenate, `model`, `size`, `color_temp`,`lumen_out`
) a
join (
  SELECT
    `model`,`size`,`color_temp`,`lumen_out`, SUM(`order_qty`),
    CONCAT(`model`,`size`,`color_temp`,`lumen_out`) AS concatenate 
  FROM `pcbs` 
  GROUP BY  concatenate, `model`, `size`, `color_temp`,`lumen_out`
) b on a.concatenate = b.concatenate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...