题目
一个叫 team 的表,里面只有一个字段name, 一共有4 条记录,分别是a,b,c,d, 对应四个球队,现在四个球队进行比赛,用一条sql 语句显示所有可能的比赛组合。
CREATE TABLE team (
name varchar2(2)
);
INSERT INTO team VALUES ('a');
INSERT INTO team VALUES ('b');
INSERT INTO team VALUES ('c');
INSERT INTO team VALUES ('d');
COMMIT;
Oracle解答
- 直接利用rowid
SELECT
*
FROM team a, team b
WHERE a.rowid > b.rowid;
- 利用开窗函数
WITH tmp_a AS (
SELECT
a.*,row_number() over(ORDER BY 1) rankid
FROM team a
)
SELECT
a.name,b.name
FROM tmp_a a, tmp_a b
WHERE a.name <> b.name
AND a.rankid > b.rankid
;
往期题目
上一题:【sql题 递归生成统计日期】