Bài toán: Ta có bảng Table1 với dữ liệu như sau:
| 
Col1 (PK) | 
Col2 (PK) | 
Col3 (PK) | 
Col4 | 
| 
A | 
1 | 
1 | 
A_1_1 | 
| 
A | 
1 | 
2 | 
A_1_2 | 
| 
A | 
2 | 
2 | 
A_2_2 | 
| 
A | 
2 | 
4 | 
A_2_4 | 
| 
B | 
1 | 
4 | 
B_1_4 | 
| 
B | 
1 | 
5 | 
B_1_5 | 
| 
C | 
1 | 
3 | 
C_1_3 | 
| 
C | 
2 | 
6 | 
C_2_6 | 
| 
C | 
2 | 
7 | 
C_2_7 | 
| 
C | 
2 | 
9 | 
C_2_9 | 
Kết quả sẽ như sau:
| 
Col1 | 
Col2 | 
Col3 | 
Col4 | 
| 
A | 
1 | 
2 | 
A_1_2 | 
| 
A | 
2 | 
4 | 
A_2_4 | 
| 
B | 
1 | 
5 | 
B_1_5 | 
| 
C | 
1 | 
3 | 
C_1_3 | 
| 
C | 
2 | 
9 | 
C_2_9 | 
SELECT T1.*
FROM Table1 T1 LEFT JOIN Table1 T2
    ON  T1.Col1 = T2.Col1
    AND T1.Col2 = T2.Col2
    AND T1.Col3 < T2.Col3
WHERE T2.Col3 IS NULL;     
Giải thích: Để giải thích cho câu lệnh trên, ta có thể sử dụng câu lệnh như sau:SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col1, T2.Col2, T2.Col3
FROM Table1 T1 LEFT JOIN Table1 T2
    ON T1.Col1 = T2.Col1
    AND T1.Col2 = T2.Col2
    AND T1.Col3 < T2.Col3;
Kết quả sẽ như sau:| 
Col1 | 
Col2 | 
Col3 | 
Col1 | 
Col2 | 
Col3 | 
| 
A | 
1 | 
1 | 
A | 
1 | 
2 | 
| 
A | 
1 | 
2 | 
A | 
1 | 
NULL | 
| 
A | 
2 | 
2 | 
A | 
2 | 
4 | 
| 
A | 
2 | 
4 | 
A | 
2 | 
NULL | 
| 
B | 
1 | 
4 | 
B | 
1 | 
5 | 
| 
B | 
1 | 
5 | 
B | 
1 | 
NULL | 
| 
C | 
1 | 
3 | 
C | 
1 | 
NULL | 
| 
C | 
2 | 
6 | 
C | 
2 | 
7 | 
| 
C | 
2 | 
6 | 
C | 
2 | 
9 | 
| 
C | 
2 | 
7 | 
C | 
2 | 
9 | 
| 
C | 
2 | 
9 | 
C | 
2 | 
NULL | 
Do đó, khi bổ sung thêm điều kiện sau khi LEFT JOIN là T2.Col3 IS NULL thì ta sẽ lấy được kết quả mong muốn.
No comments:
Post a Comment