MySQL之SQL語句實現將三個查詢結果集拼接成一個表


遇到的問題:

現在利用SQL語句查詢得到三個結果集,每一個結果集是兩列,具體為排名序號與對應的名字,如下表一。但是現在需要將這三個結果集拼接成為一個表,並且只有一個排名序號。

排名 姓名
1 張三
2 李四

 

 

 

利用SQL語句實現:


SELECT rownum, MAX(post1) AS post1,MAX(post2) AS post2,MAX(post3) AS post3
FROM
(SELECT @rownum1 := @rownum1 + 1 AS rownum, firstname AS post1,'' AS post2,'' AS post3
FROM
(SELECT firstname
FROM
exam_main a,
exam_rel_user b,
account c,
core_dept d
WHERE a.`id` = b.`exam_id`
AND b.`user_id` = c.`user_id`
AND c.`dept_id` = d.`id`
AND c.`position` IN (
'01010101',
'01010102',
'01010104'
)
ORDER BY b.score DESC,
b.last_attempt_date ASC) aa,
(SELECT
@rownum1 := 0) bb

UNION ALL

SELECT @rownum2 := @rownum2 + 1 AS rownum, '' AS post1,firstname AS post2, '' AS post3
FROM
(SELECT
firstname
FROM
exam_main a,
exam_rel_user b,
account c,
core_dept d
WHERE a.`id` = b.`exam_id`
AND b.`user_id` = c.`user_id`
AND c.`dept_id` = d.`id`
AND c.`position` IN (
'01010201',
'01010202',
'01010204'
)
ORDER BY b.`score` DESC,
b.`last_attempt_date` ASC) aa,
(SELECT
@rownum2 := 0) bb

union all

SELECT @rownum3 := @rownum3 + 1 AS rownum,'' as post1, '' as post2, firstname as post3  //這里的兩個單引號分別代表兩個空值,也就是把post1與post2值設為空,最后也就是把第一列與第二列的設為空的一列。
from
(SELECT
firstname
FROM
exam_main a,
exam_rel_user b,
account c,
core_dept d
WHERE a.`id` = b.`exam_id`
AND b.`user_id` = c.`user_id`
AND c.`dept_id` = d.`id`
AND c.`position` IN ('01010203', '01010206')
ORDER BY b.`score` DESC,
b.`last_attempt_date` ASC) aa,
(SELECT
@rownum3 := 0) bb

) cc

/* where rownum = 1*/
group by rownum

注:

1.這里面涉及四個表exam_main a,  exam_rel_user b,  account c,  core_dept d ,其中考試記錄表exam_main中的id為考試結果表exam_rel_user的exam_id外鍵,考試結果表中user_id外鍵為人員表中user_id,人員表中dept_id外鍵為core_dept部門表中的id。

2.每個結果集看作是一個表,三個結果集用 union all 連接,最后將三個結果集又看做一個表。

3.用SQL語句產生排名序號利用的是在結果集(當做一個表)之外添加查詢.如下:

 SELECT @rownum := @rownum + 1 AS rownum,'' as post1, '' as post2, firstname as post3
 FROM   (結果集)aa

(SELECT @rownum3 := 0) bb 

此處勿忘在最后的括號外添加別名,否則會出錯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM