如何从没有公共列的 2 个表中按升序打印两列
How to print two columns in ascending order from 2 tables without common column
这个问题是在面试时问我的,我无法给出答案我尝试了所有解决方案互联网都没有在 oracle 中给出所需的输出 sql
input table table A 有 ID 列,table B 有 Value 列
``table一个`
ID(table A) 值(table B)
1 电子
2 C
3乙
4个
5D
output table wants
ID 值
1个
2乙
3 C
4D
5 E
这似乎只是一个 ROW_NUMBER window 函数 -
SELECT ROW_NUMBER() OVER(ORDER BY value) id, value
FROM your_table
ORDER BY value;
您可以同时订购数字 table 和字母 table,然后将数字 table 与字母 table 连接到字母的行号 table:
SELECT numbers.id, letters.value FROM
(SELECT id
FROM tableA) numbers
JOIN
(SELECT ROW_NUMBER() OVER(ORDER BY value) id, value
FROM tableB ) letters
ON numbers.id = letters.id
ORDER BY numbers.id, letters.id
您可以使用 ASCII()
函数匹配表格,作为 id
或 value
列之一的排序,同时使用 CROSS JOIN
例如
SELECT id, value
FROM tableA
CROSS JOIN tableB
WHERE ASCII(value)-64 = id
ORDER BY id
这个问题是在面试时问我的,我无法给出答案我尝试了所有解决方案互联网都没有在 oracle 中给出所需的输出 sql
input table table A 有 ID 列,table B 有 Value 列
``table一个`
ID(table A) 值(table B)
1 电子
2 C
3乙
4个
5D
output table wants
ID 值
1个
2乙
3 C
4D
5 E
这似乎只是一个 ROW_NUMBER window 函数 -
SELECT ROW_NUMBER() OVER(ORDER BY value) id, value
FROM your_table
ORDER BY value;
您可以同时订购数字 table 和字母 table,然后将数字 table 与字母 table 连接到字母的行号 table:
SELECT numbers.id, letters.value FROM
(SELECT id
FROM tableA) numbers
JOIN
(SELECT ROW_NUMBER() OVER(ORDER BY value) id, value
FROM tableB ) letters
ON numbers.id = letters.id
ORDER BY numbers.id, letters.id
您可以使用 ASCII()
函数匹配表格,作为 id
或 value
列之一的排序,同时使用 CROSS JOIN
例如
SELECT id, value
FROM tableA
CROSS JOIN tableB
WHERE ASCII(value)-64 = id
ORDER BY id