如何比较2个查询的结果并获取匹配的值

时间:2019-04-12 20:13:32

标签: mysql sql

基本上,我需要做的是将表中的某些值连接起来,按新的连接结果分组以应用SUM函数,然后我要在另一个表中搜索连接的值,在该表中我必须应用相同的concat函数并能够比较这些值,对于匹配的值,返回列值

到目前为止,我已经创建了此查询,但是无法从第二个表中返回所需的列。

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 :(得分:0)

您可以像下面这样联接两个“表表达式”(在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

答案 1 :(得分:0)

为什么要串联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不支持。有其他方法。但是,您的问题表明您只需要匹配的行。