1

我正在寻找与这个问题相反的解决方案。我想将 tableA 自连接为 tableB,因此 where 子句不会影响 tableB 结果。我想获得所有客户的总和以及 cancel_date='0000-00-00' 的客户总和我不想切换表 tableA 和 tableB 的位置。我确实有其他 基于tableA 的whereand语句。select

SELECT 
count(tableA.client_id) as c_total, 
count(tableB.client_id) as all_c_total 
FROM (tableA) LEFT JOIN tableA tableB ON tableA.client_id = tableB.client_id
WHERE tableA.`cancel_date` = '0000-00-00' 
GROUP BY month(tableA.purch_date) 
ORDER BY month(tableA.purch_date)       

结果应如下所示:

---------------------
c_total | all_c_total
---------------------
  251   | 273
  45    | 65
  12    | 15
  23    | 29    
4

1 回答 1

0

您可以使用RIGHT JOIN, 并将条件从WHERE子句移出到连接条件中......

SELECT 
    count(t1.client_id) as c_total, 
    count(t2.client_id) as all_c_total 
FROM tableA t1 
    RIGHT JOIN tableA t2 
        ON t1.client_id = t2.client_id
        AND t1.`cancel_date` = '0000-00-00' 
GROUP BY month(t1.purch_date) 
ORDER BY month(t1.purch_date)

但是...我建议您重新考虑,切换表格的顺序,然后改用 a LEFT JOINLEFT JOIN被认为比 . 更好的风格和更易读RIGHT JOIN

于 2012-08-01T21:01:41.090 回答