0

私はこのDBを持っています。まず、このDBを作ったのではなく、構造を変えることができないので、対処しなければなりません。

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

私は Oracle ユーザーではありません。FORM_A データと FORM_B データを取得するすべての FORM を取得する必要がありますが、両方のテーブルから名前で注文する必要があります。「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)...

最初は、いくつかのループで手動で注文する必要があると思いますが、複数のテーブルから順番に注文するのではなく、一緒に注文する方法があるのだろうか?

4

2 に答える 2

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

2 つのテーブルの列構造が同じであれば、を使用UNIONして 2 つのテーブルから選択できます。

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
于 2013-02-18T11:01:19.570 に答える
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
于 2013-02-18T11:02:02.263 に答える