小美是一所中學的信息科技老師,她有一張 seat 座位表,平時用來儲存學生名字和與他們相對應的座位 ID,其中縱列的 ID 是連續遞增的。小美想改變相鄰倆學生的座位。
你能不能幫她寫一個 SQL query 來輸出小美想要的結果呢?
示例:
id | student |
---|---|
1 | Abbot |
2 | Doris |
3 | Emerson |
4 | Green |
5 | Jeames |
假如數據輸入的是上表,則輸出結果如下:
id | student |
---|---|
1 | Doris |
2 | Abbot |
3 | Green |
4 | Emerson |
5 | Jeames |
注意:
如果學生人數是奇數,則不需要改變最後一個同學的座位。
分析
依題,座位 ID 是連續的,我們可以獲取前後座位的信息,並做以下處理即可:
- 當前座位 ID 為奇數,和後一個座位的同學換座。
- 當前座位 ID 為偶數,和前一個座位的同學換座。
- 如果前/後座位為空,則不換座。
解答
1SELECT
2 s.id,
3 IFNULL(IF(s.id%2=1, n.student, p.student), s.student) as student
4FROM seat s
5LEFT JOIN seat p ON p.id = s.id-1
6LEFT JOIN seat n ON n.id = s.id+1