2017-07-26 6 views

答えて

1

を使用することができますfiddle

です:

SELECT 
    T.A, 
    T2.B, 
    T3.C 
FROM 
    test T 
    CROSS JOIN test T2 
    CROSS JOIN test T3 
ORDER BY 
    T.a, 
    T2.b, 
    T3.c; 

これは、CROSS JOIN演算を使用します。これは、2つのテーブルのデカルト積を生成します。つまり、他のすべての行と一致するすべての行が生成されます。これは、あまり使われていないSQLの部分です。ここの良い説明があります:

http://sqlfiddle.com/#!4/91137/3

http://www.w3resource.com/oracle/joins/oracle-cross-join.php

はここに私のコードの実施例を参照してください。

0

我々が持っているテーブル:だから

CREATE TABLE test 
( a NUMBER, 
    b VARCHAR2(20 CHAR), 
    c VARCHAR2(20 CHAR) 
) 

に、あなたが必要とする照会:

SELECT t.a, t2.b, t3.c FROM test t 
    CROSS JOIN test t2 
    CROSS JOIN test t3 
    ORDER BY t.a, t2.b, t3.c; 
0

あなたはクロスが同じテーブルに結合を使用することができます。

CREATE TABLE test (A varchar(10), B varchar(10),C varchar(10)); 
INSERT INTO test (A, B, C) VALUES ('1', 'a', '!'); 
INSERT INTO test (A, B, C) VALUES ('2', 'b', '@'); 

、あなたが行うことができます:スキーマが

CREATE TABLE IF NOT EXISTS `docs` (
    `id` int(6) unsigned NOT NULL, 
    `A` int(3) unsigned NOT NULL, 
    `B` varchar(10) NOT NULL, 
    `C` varchar(10) NOT NULL, 
    PRIMARY KEY (`id`) 
) DEFAULT CHARSET=utf8; 
INSERT INTO `docs` (`id`, `A`, `B`, `C`) VALUES 
    ('1', '1', 'a', '!'), 
    ('2', '2', 'b', '@'); 

であれば、ここであなたが正しくて、私はあなたの例のスキーマを理解してきたと仮定すると、

SELECT CONCAT(t1.a,' ',t2.B,' ',t3.c) 
FROM (SELECT DISTINCT A FROM docs) AS t1 
CROSS JOIN (SELECT DISTINCT B FROM docs) AS t2 
CROSS JOIN (SELECT DISTINCT C FROM docs) AS t3 
order by t1.a, t2.b, t3.c 
関連する問題