Oracle selfjoin

em có chút thắc mắc ntn anh em chỉ giáo giùm.
Có bảng test chỉ có 1 côt là team. bảng chỉ có 4 bản ghi là a b c d
Yêu cầu là truy vấn kiểu gì để cho ra kết quả ntn ạ(giống như chia các đội bóng trong vòng bảng sao cho mỗi đội gặp nhau đúng 1 lần thôi).

team 1 team2
a b
a c
a d
b c
b d
c d

search cross join (Cartesian) xem thế nào.

1 Like
SELECT t1.team AS team1, t2.team AS team2 ,...
FROM test AS t1, test AS t2
WHERE t1.team < t2.team
ORDER BY t1.team, t2.team
3 Likes

em cũng làm thế nhưng sư phụ em kêu phải làm sao ra đúng thứ tự như thế cơ

à. chỗ này em hơi thắc mắc 1 chút đó là so sánh giữa t1.team < t2.team thì là so sánh dựa trên mã ascii hay cái gì hả anh

merged and moved by noname00

1 Like

Chỉ dùng SQL thuần thì câu trên thiếu group by nhỉ.

1 Like

Sao không đúng nhỉ? :thinking:
Mình mới thử chạy ra kết quả mà.

Vô trang này viết SQL nè: https://www.w3schools.com/sql/trysql.asp?filename=trysql_op_in
Nhập từng lệnh sau vào:

CREATE TABLE Test (
  team CHAR
);
INSERT INTO Test
VALUES ('a'), ('b'), ('c'), ('d');
SELECT * FROM Test;
team
a
b
c
d
SELECT t1.team AS team1, t2.team AS team2
FROM test AS t1, test AS t2
WHERE t1.team < t2.team
ORDER BY t1.team, t2.team;
team1 team2
a b
a c
a d
b c
b d
c d
3 Likes

sorry. em ghi ẩu. thực ra đề bài của em không phải là abcd theo thứ tự sẵn như vậy mà là những cái tên

team
ind
pak
ban
sri

select làm sao để ra được như sau

teama teamb
ind pak
ind ban
ind sri
pak ban
pak sri
ban sri

Dùng group by thử xem :smiley:

SQL không có ấn định thứ tự của bản ghi đâu :slight_smile:

1 Like

Thầy chơi không cho thứ tự các giá trị của team thì mình chơi ăn gian vậy. :penguin:
Lợi dụng internal implementation để ra kết quả.

SELECT t1.team AS team1, t2.team AS team2
FROM Test t1, Test t2
WHERE t1.team != t2.team AND (
  (t1.team = 'ind') OR
  (t1.team = 'pak' AND t2.team != 'ind') OR
  (t1.team = 'ban' AND t2.team != 'ind' AND t2.team != 'pak'));

SQL trên chỉ đúng nếu insert theo đúng thứ tự: ind < pak < ban < sri

INSERT INTO Test
VALUES ('ind'), ('pak'), ('ban'), ('sri');
3 Likes

thanks anh. em đăng khá nhiều bài mà cũng nhiều câu hỏi củ chuối nên ít người giúp không nhầm thì anh support em khá nhiều lần rồi. hehe.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?