0

基本的に色のテーブルがありますが、すべての色を一緒に一致させるクエリを実装しました。ループでこれを行うことは可能ですか?(おそらくネストされたループです)。

私の考えは、最初の色を他のすべての色でループし、次に 2 番目の色を他のすべての色でループすることです。ヘルプは大歓迎です。

私のテーブル- さまざまな色が含まれています

       CREATE TABLE Colors
      (c_ID VARCHAR2(3) NOT NULL,
      c_NAME VARCHAR2(11));

     INSERT INTO Colors VALUES
     ('T01','RED');
     INSERT INTO Colors VALUES
     ('T02','BLUE');
     INSERT INTO Colors VALUES
     ('T03','BLACK');
     INSERT INTO Colors VALUES
     ('T04','YELLOW');
     INSERT INTO Colors VALUES
     ('T05','ORANGE');

さまざまな色を一致させるために使用したSQLクエリ

         select  a.c_id as HM, s.c_id as AW
         from colors a, colors s
         where a.c_id <> s.c_id 
         order by a.c_id;
4

2 に答える 2

1

再帰クエリ。(これは Postgres 用です。構文は異なる場合があります)

CREATE TABLE Colors
      (c_ID INTEGER NOT NULL
        , c_NAME VARCHAR
        );

     INSERT INTO Colors VALUES
     (1,'RED'), (2,'BLUE'), (3,'BLACK'), (4,'YELLOW'), (5,'ORANGE');

WITH RECURSIVE xxx AS (
        SELECT
        c1.c_ID AS last_id
        , c1.c_NAME::text AS all_colors
        FROM Colors c1
        UNION ALL
        SELECT c2.c_ID AS last_id
                , x.all_colors|| '+' || c2.c_NAME::text AS all_colors
        FROM Colors c2
        JOIN xxx x ON x.last_id < c2.c_ID
        )
SELECT all_colors
FROM xxx
        ;

結果:

CREATE TABLE
INSERT 0 5
          all_colors          
------------------------------
 RED
 BLUE
 BLACK
 YELLOW
 ORANGE
 RED+BLUE
 RED+BLACK
 RED+YELLOW
 RED+ORANGE
 BLUE+BLACK
 BLUE+YELLOW
 BLUE+ORANGE
 BLACK+YELLOW
 BLACK+ORANGE
 YELLOW+ORANGE
 RED+BLUE+BLACK
 RED+BLUE+YELLOW
 RED+BLUE+ORANGE
 RED+BLACK+YELLOW
 RED+BLACK+ORANGE
 RED+YELLOW+ORANGE
 BLUE+BLACK+YELLOW
 BLUE+BLACK+ORANGE
 BLUE+YELLOW+ORANGE
 BLACK+YELLOW+ORANGE
 RED+BLUE+BLACK+YELLOW
 RED+BLUE+BLACK+ORANGE
 RED+BLUE+YELLOW+ORANGE
 RED+BLACK+YELLOW+ORANGE
 BLUE+BLACK+YELLOW+ORANGE
 RED+BLUE+BLACK+YELLOW+ORANGE
(31 rows)
于 2013-05-01T11:39:41.557 に答える
1

私があなたを正しく理解していれば、すべての色を単一の行に、または単一の行の単一の列に配置したいですか?

表示するクエリは、色のペアのみになります。すべての色が必要な場合は、色の数だけ自己結合する必要があります。したがって、色を追加または削除すると、醜いクエリが壊れたクエリになります。一般に、列の数が色の数に依存するクエリ結果が得られます。これは、リレーショナル パラダイムではうまく機能しません。

すべての色を単一の値にしたい場合は、色を集約する必要があります。クエリの結果は、すべての色が組み合わされた単一の値になり、場合によってはコンマで区切られます。

ものを集約するには、集約関数が必要です。よく知られている集計関数は SUM、MIN、または AVG ですが、ここで必要なことを行うものはありません。どの集計関数を選択するかは、特定の SQL ダイアレクトによって異なります。

オラクルの場合は、pivot または xmlaggを調べることができます。

全体を手続き型コードでラップすることも検討してください。

于 2013-05-01T11:18:24.863 に答える