01/10/2018, 17:46

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
Nguyen Ca viết 20:00 ngày 01/10/2018

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

Hung viết 19:47 ngày 01/10/2018
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
Ngoclong Pham viết 19:53 ngày 01/10/2018

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

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ơ

Ngoclong Pham viết 20:01 ngày 01/10/2018

à. 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

rogp10 viết 19:54 ngày 01/10/2018

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

Hung viết 19:57 ngày 01/10/2018

Sao không đúng nhỉ?
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
Ngoclong Pham viết 19:53 ngày 01/10/2018

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 lam sao de ra được như sau
teama teamb
ind pak
ind ban
ind sri
pak ban
pak sri
ban sri

rogp10 viết 19:50 ngày 01/10/2018

Dùng group by thử xem

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

Hung viết 19:50 ngày 01/10/2018

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.
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');
Ngoclong Pham viết 19:59 ngày 01/10/2018

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.

Bài liên quan
0