2013-07-11 152 views
-2

我需要一些幫助的跟隨着MySQL查詢重寫SQL查詢無子查詢

我要重寫我的查詢,而無需任何的子查詢 - 但我不知道如何..

這是一個視頻租賃商店數據庫; )

SELECT k.first_name, k.last_name, SUM(amount) AS profit 
FROM payment AS p 
JOIN (SELECT c.* FROM customer AS c 
JOIN rental AS r ON c.customer_id = r.customer_id 
WHERE r.return_date IS NULL GROUP BY c.customer_id HAVING 
COUNT(*) > '1') AS k ON p.customer_id = k.customer_id 
GROUP BY k.customer_id 
HAVING SUM(amount) > 100 
ORDER BY profit DESC; 

謝謝:)

+0

爲什麼要刪除子查詢?這似乎是一種完全合理的做事方式,並非所有要求都可以在沒有子查詢的情況下表達出來。你是否檢查過EXPLAIN計劃,看看有沒有特別想要「修復」的東西? – MatBailie

+0

我想要刪除子查詢.. cuase我的老師要求/在家工作。我喜歡加入更多的子查詢;) – Tobias

+0

注意自我:不要僱傭無法完成自己的家庭作業的人。 – Richard

回答

0

這本:

SELECT c.first_name, c.last_name, c.customer_id,SUM(amount) AS profit 
FROM payment AS p 
    INNER JOIN (customer c 
     INNER join rental r 
     ON c.customer_id=r.customer_id) 
    ON p.customer_id = c.customer_id 
GROUP BY c.customer_id,c.last_name,c.first_name 
HAVING SUM(amount) > 100 
ORDER BY profit DESC; 

使用INNER JOIN將限制此查詢僅限於已付款的客戶。

+0

作業是寫一個查詢 - 我做了這個,它的工作正常 - 但3小時後,我不知道該怎麼辦...;) – Tobias

+0

嘗試加入付款直接向客戶和客戶直接出租。它也可能有助於指定LEFT,RIGHT或INNER。 – Richard

+0

好吧我的sql代碼看起來像你的:)但是我可以在哪裏定義count(*)> 1?該查詢應該顯示此時已借用2部電影的人「這是我最大的問題..:/我試着把它放在那裏,但它不工作(對不起我的英語;)) – Tobias