1

この質問の反対の解決策を探しています。tableA を tableB として自己結合したいので、where 句は tableB の結果に影響しません。すべての顧客の合計と cancel_date='0000-00-00' の顧客の合計を取得したい テーブル tableA と tableB の場所を入れ替えたくありません。 tableA に基づくステートメントは他にもwhereあります。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)

しかし... 再考し、テーブルの順序を切り替えて、LEFT JOIN代わりに a を使用することをお勧めします。 LEFT JOINよりもスタイルが良く、読みやすいと考えられていますRIGHT JOIN

于 2012-08-01T21:01:41.090 に答える