一种方式做到这一点在MySQL
SELECT c.class_name, r.room_name
FROM
(
SELECT class_name, @n := @n + 1 rnum
FROM classes CROSS JOIN (SELECT @n := 0) i
ORDER BY class_name
) c JOIN
(
SELECT room_name, @m := @m + 1 rnum
FROM classrooms CROSS JOIN (SELECT @m := 0) i
ORDER BY room_name
) r
ON c.rnum = r.rnum
输出:
| CLASS_NAME | ROOM_NAME |
-------------|-----------|
| Calculus | Room 101 |
| English | Room 102 |
| History | Room 201 |
这里是SQLFIddle演示
Postgres里同样的事情会像
SELECT c.class_name, r.room_name
FROM
(
SELECT class_name,
ROW_NUMBER() OVER (ORDER BY class_name) rnum
FROM classes
) c JOIN
(
SELECT room_name,
ROW_NUMBER() OVER (ORDER BY room_name) rnum
FROM classrooms
) r
ON c.rnum = r.rnum
这里是SQLFiddle演示
而且在SQLite的
SELECT c.class_name, r.room_name
FROM
(
SELECT class_name,
(SELECT COUNT(*)
FROM classes
WHERE c.class_name >= class_name) rnum
FROM classes c
) c JOIN
(
SELECT room_name,
(SELECT COUNT(*)
FROM classrooms
WHERE r.room_name >= room_name) rnum
FROM classrooms r
) r
ON c.rnum = r.rnum
这里是SQLFiddle演示
它看起来像一个加入,但它通过什么标准并不清楚。 – JJJ
目前我正在处理MySQL,但我想知道是否有任何通用的方法来做到这一点(因为我一般处理PostgreSQL,偶尔也处理SQLite)。 –
您必须在两个表之间使用[join](http://en.wikipedia.org/wiki/Join_%28SQL%29)在多个表上使用查询。 – JimmyB