2013-04-25 51 views
2

我不太清楚如何最好地說出這個問題。我不一定需要一種方法來消除包含具有空值的列的行 - 我只需要弄清楚如何調整我的查詢,以便它只爲每個用戶生成單行結果,我需要......這裏是一些背景資料,以幫助澄清:如何調整這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,以及其他來源。我應用於特定查詢時無法工作。我花了幾個小時進行隨機調整,希望得到我需要的結果,但沒有運氣。張貼這裏是我絕對的最後的手段!

對不起,因爲這麼長時間,我只是想確定我提供了所有需要的信息來幫助解決我的問題。非常感謝你的幫助。

回答

0

LEFT JOIN更改爲naINNER JOIN

+0

SON-OF - &%*#$!非常感謝,這就是訣竅。我知道這將是一件簡單的事情。非常感激! – John 2013-04-25 18:54:47

+0

很高興我能幫到你。 :) – 2013-04-25 18:55:55