MySQL是一個(gè)常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),支持多表查詢、排序、聚合等功能。在實(shí)際開發(fā)過(guò)程中,經(jīng)常需要查詢出前幾名的數(shù)據(jù),下面介紹多表查詢前三名的方法。
SELECT * FROM ( SELECT t1.name, t2.score FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.id ORDER BY t2.score DESC ) AS t GROUP BY t.name LIMIT 3;
上面的查詢語(yǔ)句使用了內(nèi)連接(INNER JOIN),將兩張表根據(jù)相同的id字段關(guān)聯(lián)起來(lái),然后按照分?jǐn)?shù)(score)降序排序,最后通過(guò)GROUP BY語(yǔ)句取出每個(gè)名字(name)對(duì)應(yīng)的最高分?jǐn)?shù),限制結(jié)果集只顯示前三名數(shù)據(jù)。
如果需要查詢多張表的前三名,可以使用UNION ALL操作符將多個(gè)SELECT語(yǔ)句的結(jié)果合并成一個(gè)結(jié)果集,并按照分?jǐn)?shù)排序。
(SELECT t1.name, t2.score FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.id ORDER BY t2.score DESC LIMIT 3) UNION ALL (SELECT t1.name, t3.score FROM table1 t1 INNER JOIN table3 t3 ON t1.id = t3.id ORDER BY t3.score DESC LIMIT 3) ORDER BY score DESC LIMIT 3;
上面的查詢語(yǔ)句先查詢表1和表2的前三名數(shù)據(jù),再查詢表1和表3的前三名數(shù)據(jù),然后將兩個(gè)語(yǔ)句的結(jié)果集合并,并按照分?jǐn)?shù)(score)降序排序,最后限制結(jié)果集只顯示前三名數(shù)據(jù)。
需要注意的是,如果有重復(fù)的數(shù)據(jù),使用UNION ALL操作符會(huì)將所有結(jié)果合并,而不會(huì)去重。如果需要去重,可以使用UNION操作符。