2013-02-18 43 views
0

我有这个数据库。对于初学者,我没有创建这个数据库,我不能改变结构,所以我必须处理它。如何通过不同表格中的两个相同属性进行排序?

+------+ +--------+ +--------+ 
| 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)... 

起初,我想我会用一些人工的循环订购它,但我不知道是否有下令将倍数表一起的方式,和其他的没有后一个?

回答

0

我假设下表内容:

 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_IDFORM表,然后您从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 
0

你可以

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 
相关问题