仅与另一个表连接表的一列

时间:2014-02-28 14:53:44

标签: mysql sql

我有以下查询给出了我想要的东西(见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

2 个答案:

答案 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中没有相应的条目,它将显示为空。