我不太清楚如何最好地說出這個問題。我不一定需要一種方法來消除包含具有空值的列的行 - 我只需要弄清楚如何調整我的查詢,以便它只爲每個用戶生成單行結果,我需要......這裏是一些背景資料,以幫助澄清:如何調整這3個表MySQL連接查詢以消除包含空值列的行?
好吧,所以我有5個表:用戶,local_ads(本地廣告),local_rev(本地收入報告),nat_ads(全國廣告)和nat_rev(國家收入報告)。
每個月,用戶都會提交一份全國收入報告和一份當地收入報告。當用戶創建他們的月度報告時,他們會得到一個唯一的本地和國家報告ID。 report_id和相應的user_id存儲在它們各自的表(local_rev或nat_rev)中。
然後用戶向每個報告提交廣告。爲本月的本地報告提交的本地廣告存儲在local_ads表中,對於給定的用戶,其每個廣告都共享同一個report_id。國家廣告也是如此。
local_rev和nat_rev表中的每個廣告都有一個價格和大小列。
我試圖執行一個查詢,它會爲每個用戶生成本地廣告總大小,本地廣告數量,本地廣告總價格,國家廣告總大小,國家廣告數量和國家廣告總價格WHERE month =「 X。」
這裏是已經來到最接近我所需要的查詢:
SELECT u.franchise, lr.lrr_id, CountLocId, TotalPrice, nr.nrr_id, CountNatId, TotalNMoney,
(
TotalPrice + TotalNMoney
)TotalRev
FROM users u
LEFT JOIN local_rev lr ON u.user_id = lr.user_id
LEFT JOIN (
SELECT lrr_id, COUNT(lad_id) CountLocId, SUM(price) TotalPrice
FROM local_ads
GROUP BY lrr_id
)la ON lr.lrr_id = la.lrr_id
LEFT JOIN nat_rev nr ON u.user_id = nr.user_id
LEFT JOIN (
SELECT nrr_id, COUNT(nad_id) CountNatId, SUM(tmoney) TotalNMoney
FROM nat_ads
WHERE MONTH = 'February'
GROUP BY nrr_id
)na ON nr.nrr_id = na.nrr_id
WHERE lr.month = 'February'
ORDER BY franchise
LIMIT 0 , 30
的問題是,它是產生連續的每個用戶,爲每一位個月而不是單月。你可以在下面的結果中看到這個。在結果中,不具有NULL值的行是我想要的行。所以我只需要弄清楚如何消除NULL值的行。
userA 84 39 5200 158 NULL NULL NULL
userA 84 39 5200 53 NULL NULL NULL
userA 84 39 5200 182 NULL NULL NULL
userA 84 39 5200 81 5 5900 11100
userB 93 1 100 51 NULL NULL NULL
userB 93 1 100 200 NULL NULL NULL
userB 93 1 100 84 9 5742 5842
所以,我已經嘗試使用數十個不同的例子,我發現這裏在Stackoverflow,以及其他來源。我應用於特定查詢時無法工作。我花了幾個小時進行隨機調整,希望得到我需要的結果,但沒有運氣。張貼這裏是我絕對的最後的手段!
對不起,因爲這麼長時間,我只是想確定我提供了所有需要的信息來幫助解決我的問題。非常感謝你的幫助。
SON-OF - &%*#$!非常感謝,這就是訣竅。我知道這將是一件簡單的事情。非常感激! – John 2013-04-25 18:54:47
很高興我能幫到你。 :) – 2013-04-25 18:55:55