繁体   English   中英

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

[英]how to compare the result of 2 queries and get the values that match

基本上我需要做的是连接表中的一些值,按新的连接结果分组以应用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

您可以连接两个“表表达式”(在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

为什么你会串联为一个值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并不支持它。 还有其他方法。 但是,您的问题表明您只想匹配行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM