我有以下查询给出了我想要的东西(见table_entrees)
SELECT designation, ref1, ref2, ref3, sum( a.qte ) AS TotalQte
FROM table_entrees a
WHERE a.ref1 = 'VT2'
GROUP BY a.designation, a.ref1, a.ref2, a.ref3
table_entrees:
designation ref1 ref2 ref3 TotalQte
VT VT2 GRIS L 150
VT VT2 GRIS XL 150
VT VT2 Jaune L 150
VT VT2 Jaune XL 150
和另一个查询与第一个查询相同但是对于另一个表
SELECT designation, ref1, ref2, ref3, sum( b.qte ) AS TotalQte2
FROM table_sorties b
WHERE a.ref1 = 'VT2'
GROUP BY b.designation, b.ref1, b.ref2, b.ref3
table_sorties:
designation ref1 ref2 ref3 TotalQte2
VT VT2 GRIS L 62
VT VT2 JAUNE L 15
但问题是我试图将两者结合起来,就像下面的表格一样,它检查table_sorties的ref1,ref2,ref3是否存在于table_entrees中,然后显示它的结果,否则在TotalQte2中显示为0
designation ref1 ref2 ref3 TotalQte TotalQte2
VT VT2 GRIS L 150 62
VT VT2 GRIS XL 150 0
VT VT2 Jaune L 150 15
VT VT2 Jaune XL 150 0
我尝试了以下查询,但没有给出预期的结果!!
SELECT
a.designation,
a.ref1,
a.ref2,
a.ref3,
sum( a.qte ) AS TotalQte,
sum( b.qte ) AS TotalQte2
FROM FROM table_entrees a,table_sorties b
WHERE a.ref1 = 'VT2'
GROUP BY a.designation, a.ref1, a.ref2, a.ref3
答案 0 :(得分:0)
将每个查询用作子查询,并使用left outer join
:
SELECT q1.designation, q1.ref1, q1.ref2, q1.ref3, q1.TotalQte,
coalesce(q2.TotalQte2, 0) as TotalQte2
FROM (SELECT designation, ref1, ref2, ref3, sum( a.qte ) AS TotalQte
FROM table_entrees a
WHERE a.ref1 = 'VT2'
GROUP BY a.designation, a.ref1, a.ref2, a.ref3
) q1 LEFT JOIN
(SELECT designation, ref1, ref2, ref3, sum( b.qte ) AS TotalQte2
FROM table_sorties b
WHERE a.ref1 = 'VT2'
GROUP BY b.designation, b.ref1, b.ref2, b.ref3
) q2
on q1.designation = q2.designation and
q1.ref1 = q2.ref1 and
q1.ref2 = q2.ref2 and
q1.ref3 = q2.ref3;
在聚合之前进行连接时,您将获得两个表中qte
个字段的所有组合的笛卡尔积。一般而言,笛卡尔积上的sum()
不正确。
答案 1 :(得分:0)
基本上你想在三个ref列上进行左连接,如上一个答案中所述。
当您执行左连接B时,表A中的所有列都将保留。如果表B中没有相应的条目,它将显示为空。