在MySQL中,可以通過下面兩種方法來實現(xiàn)類似于WITH的功能:
1. 使用派生表(Derived Table) 派生表是從一個SELECT語句中派生出來的表,可以讓我們在后續(xù)的查詢中使用這個表。使用派生表可以達(dá)到類似WITH的效果。 SELECT a.id, a.name, b.total FROM user a INNER JOIN ( SELECT user_id, SUM(score) AS total FROM score GROUP BY user_id ) b ON a.id = b.user_id ORDER BY total DESC;
上面的查詢中,我們使用了派生表b,它是從score表中派生出來的,包含每個用戶的總分?jǐn)?shù)。然后我們再將user表和b表進(jìn)行關(guān)聯(lián),輸出用戶的ID、姓名和分?jǐn)?shù)。
2. 使用變量(Variable) MySQL中的變量可以讓我們在查詢中存儲和傳遞數(shù)據(jù)。通過使用變量,我們可以將較為復(fù)雜的查詢分步進(jìn)行,達(dá)到類似WITH的效果。 SET @total_score := ( SELECT SUM(score) FROM score WHERE user_id = 1 ); SELECT user.id, user.name, @total_score AS total FROM user WHERE user.id = 1;
上面的查詢中,我們使用了@total_score變量來存儲用戶1的總分?jǐn)?shù)。首先我們單獨查詢了用戶1的總分?jǐn)?shù),并將結(jié)果存儲在變量中。然后我們再使用這個變量來輸出用戶的ID、姓名和總分?jǐn)?shù)。