1
我正在尋找解決方案對面this question。 我想將tableA自聯接爲tableB,所以where子句不會影響tableB的結果。 我想通過cancel_date ='0000-00-00'獲得所有客戶和客戶總數的總和 我不想切換表tableA和tableB的位置。我確實有其他where
和select
陳述基於tableA。MySQL自行加入排除其中
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
我所有的select和where語句都是基於tableA的,所以我認爲只是因爲tableB中的一個額外列(all_c_total),會導致不恰當的切換表。並且你的答案不起作用(cancel_date仍然影響兩個表) – castt 2012-08-01 21:10:35
@castt嗯......我已經更新了我的答案以替代兩個表......'cancel_date'不應該限制't2'的結果,所以如果更新的查詢不會給你預期的結果,還有一些其他問題,在這種情況下,我建議張貼樣本數據以符合你提供的預期結果。 – 2012-08-01 21:16:26
@castt在'tableA t1'的where子句中不應該有任何條件......這會將你的'outer join'變成'inner join'。至於在你的'from'子句中你的表的排序,我認爲這不應該由你的'select'語句中哪個表具有最多的列來決定......相反,我認爲排序應該基於某些(邏輯進程),從所需的記錄('t2')開始,進行到可選記錄('t1')。 – 2012-08-01 21:19:10