2013-02-18 4 views
0

У меня есть эта БД. Для начала я не создал эту БД, и я не могу изменить структуру, поэтому мне приходится иметь дело с ней.Как я могу заказать два одинаковых атрибута из разных таблиц?

+------+ +--------+ +--------+ 
| FORM | | FORM_A | | FORM_B | 
+------+ +--------+ +--------+ 
| id | | form_id| | form_id| 
      | name | | name | 

Я не пользователь Oracle, мне нужно, чтобы получить все ФОРМУ, где я буду получать FORM_A ДАННЫЕ, а также FORM_B, но мне нужно, чтобы заказать его по имени из обеих таблиц. «имя» - это те же данные, что и для 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_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 
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 
Смежные вопросы