[英]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.