如何通过不同表格中的两个相同属性进行排序?
问题描述:
我有这个数据库。对于初学者,我没有创建这个数据库,我不能改变结构,所以我必须处理它。如何通过不同表格中的两个相同属性进行排序?
+------+ +--------+ +--------+
| FORM | | FORM_A | | FORM_B |
+------+ +--------+ +--------+
| id | | form_id| | form_id|
| name | | name |
我不是一个Oracle用户,我需要获得所有形式,其中我会得到FORM_A DATAS以及FORM_B,但我需要通过名称从两个表来订购吧。 “name”与FORM_A和FORM_B是同一种数据,太糟糕了,它不在FORM中。
Exemple :
FORM_A = [a, b, d, f]
FORM_B = [e, c, g]
FORM datas must be ordered as FORM_A(a), FORM_A(b), FORM_B(c), FORM_A(d), FORM_B(e)...
起初,我想我会用一些人工的循环订购它,但我不知道是否有下令将倍数表一起的方式,和其他的没有后一个?
答
我假设下表内容:
FORM FORM_A FORM_B
+----+--------+ +------+---------+ +------+---------+
| ID | NAME | | NAME | FORM_ID | | NAME | FORM_ID |
+----+--------+ |+-----+---------+ |+-----+---------+
| 1 | First | | a | 1 | | e | 3 |
| 2 | Second | | b | 2 | | c | 4 |
| 3 | Third | | d | 2 | | g | 5 |
| 4 | Fourth | | f | 3 | +------+---------+
| 5 | Fifth | +------+---------+
+----+--------+
您可以使用UNION
从两个表中选择,前提是两个表具有相同的列结构:
SELECT FORM_A.form_id, FORM_A.name
FROM FORM_A
UNION ALL
SELECT FORM_B.form_id, FORM_B.name
FROM FORM_B
ORDER BY name;
FORM_ID NAME
---------- -----
1 a
2 b
4 c
2 d
3 e
3 f
5 g
通过加入FORM_ID
与FORM
表,然后您从FORM
获得相应的行:
SELECT ab.Name AS AB, f.Name AS DATA
FROM (SELECT FORM_A.form_id, FORM_A.name
FROM FORM_A
UNION ALL
SELECT FORM_B.form_id , FORM_B.name
FROM FORM_B
ORDER BY name) ab
JOIN FORM f ON f.id=ab.FORM_ID;
AB DATA
----- ----------
a First
b Second
c Fourth
d Second
e Third
f Third
g Fifth
答
你可以
select *
from (select id, null as name from form union all
select id, name from formA union all
select id, name from formB
) temp
order by temp.name