2016-09-01 7 views
0

以下のすべての結果は互いに関連していませんが、条件を使用することはできません。条件を使用せずにすべてのテーブルを結合する方法

ID 
---------- 
    1 
    2 
    3 
    4 
    5 
    6 
    7 

7行が選択されています。

NAME 
----------------- 
SRUJAN 
DEERAJ 
VINEETH 
CHANIKYA 
LAVANYA 
KAVITHA 
BUNNY 

7行が選択されています。

AGE 
---------- 
    23 
    24 
    26 
    25 
    29 
    28 
    24 

7行が選択されています。

ADDRESS 
------------- 
NAGARAM 
BANDLAGUDA 
UPPAL 
KUKATPALLY 
HB COLONY 
MOULALI 
BOUDHA NAGAR 

7行が選択されています。

SALARY 
---------- 
12000 
13000 
14000 
15000 
16000 
17000 
18000 

7行が選択されています。

私は

SQL>select id,name,age,address,salary from table1,table2,table3,table4,table5; 

を使用したが、それは私が1つのテーブルのみを取得したい

を選択16807行を示します。 お問い合わせください。

+0

あなたはidがなどその名前、年齢、一緒に行く必要がある条件 –

+0

ずにあなたが望む方法で参加できないのですか?サンプルデータを生成するためにこれを使用している場合(たとえば、コードをテストできるように)、ランダムなマッチングはOKです。これは2つの方法で行うことができます - 純粋に無作為のマッチか、ソートを使って:id = 1は最初の名前(アルファベット順)、最低年齢、最低給与などを取得します。 – mathguy

答えて

0

1つの列しか持たず、関係のない2つの表間の唯一の可能な結合は、クロス結合です。あなたはそれを避けることはできません。あなたが参加しようとしたときも同じことが起こっています。あなたのための最良の方法は、IDとしてシーケンスを作成し、それをtable2のselectステートメントで呼び出すことです。

CREATE SEQUENCE TEST_SEQ 
    START WITH 1 
    MAXVALUE 9999999999999999999999999999 
    MINVALUE 1 
    NOCYCLE; 

select TEST_SEQ.nextval ID,col1 NAME 
from table2; 
+0

私はもう1つの提案をしてください:私は5つのテーブルtable1、table2、table3、table4、table5だけの列ID、名前、年齢、住所、給与を持つクエリを必要とします。 –

+0

適切なテーブルの説明とサンプルデータを含むクエリとして投稿してください。 – XING

+0

テーブルを作ってそれぞれを列の1つとして保存する方が簡単です。このようなテーブルを単一の列に何も関係なく結合することはできません。それはデカルトの結果を与えるでしょう。つまり、各表の行は、7つの表の各行と互いに結合されています。 – XING

0

これは、内部結合を使用する片方向です。この解決方法は、最も低いIDとアルファベット順、最低年齢などを一致させます。

この順序付けられた一致の代わりに、ランダムな一致が必要な場合は、これも簡単です:prepover...節テーブルの場合は、order by句をorder by dbms_random.value()(すべての場所)に変更します。

以下のソリューションでは、最初の3つのテーブルのみを使用しますが、入力テーブルの数は同じでも同じです。

with 
    tbl_id (id) as (
     select 1 from dual union all 
     select 2 from dual union all 
     select 3 from dual union all 
     select 4 from dual union all 
     select 5 from dual union all 
     select 6 from dual union all 
     select 7 from dual 
    ), 
    tbl_name (name) as (
     select 'SRUJAN' from dual union all 
     select 'DEERAJ' from dual union all 
     select 'VINEETH' from dual union all 
     select 'CHANIKYA' from dual union all 
     select 'LAVANYA' from dual union all 
     select 'KAVITHA' from dual union all 
     select 'BUNNY' from dual 
    ), 
    tbl_age (age) as (
     select 23 from dual union all 
     select 24 from dual union all 
     select 26 from dual union all 
     select 25 from dual union all 
     select 29 from dual union all 
     select 28 from dual union all 
     select 24 from dual 
    ), 
    prep_id (id, rn) as (
     select id, row_number() over (order by id) from tbl_id 
    ), 
    prep_name (name, rn) as (
     select name, row_number() over (order by name) from tbl_name 
    ), 
    prep_age (age , rn) as (
     select age, row_number() over (order by age) from tbl_age 
    ) 
select i.id, n.name, a.age 
from prep_id i inner join prep_name n on i.rn = n.rn 
       inner join prep_age a on i.rn = a.rn 
; 

出力

 ID NAME   AGE 
---------- -------- ---------- 
     1 BUNNY   23 
     2 CHANIKYA   24 
     3 DEERAJ   24 
     4 KAVITHA   25 
     5 LAVANYA   26 
     6 SRUJAN   28 
     7 VINEETH   29 

7 rows selected 
関連する問題