2

「商品」(column1xcolumn2)なしで、直接関係のない2列を並べて表示することはできますか?

これをチェックして。http://sqlfiddle.com/#!3/212b6/1

すべての group_id、website、および History を最小限の重複フィールドで表示するクエリを作成しようとしています。グループ、ウェブサイト、履歴の 3 つのテーブルがありますが、デカルト結合が表示されます。1 つのグループに 4 つの Web サイトと 3 つの履歴があるとします。12 件のレコードが表示されます。私はこのようなものが欲しい:

      group_id   |   website  |  History
          1         website1      hist1
          1         website2      hist2
          1         website3      hist3
4

1 に答える 1

1

row_number()を使用して行番号を割り当てることにより、ほとんどのデータベースでこれを行うことができます。これは ANSI 標準の機能です。あなたが望むものに近づくには:

select g.group_id, w.website, h.ma_history
from (select g.*, row_number() over (order by group_id) as seqnum
      from tbl_group g
     ) g full outer join
     (select w.*, row_number() over (order by website) as seqnum
      from table_website w
     ) w
     on g.seqnum = w.seqnum full outer join
     (select h.*, row_number() over (order by ma_history) as seqnum
      from table_ma_history h
     ) h
     on h.seqnum = coalesce(g.seqnum, w.seqnum)

希望する表現との違いは、「欠落している」値が 1 つの行から次の行に複製されないことです。代わりに、NULL として表されます。あなたの例:

  group_id   |   website  |  History
      1         website1      hist1
      NULL      website2      hist2
      NULL      website3      hist3

「みたいな」ということで、これで十分近いでしょうか?値の複製は、データベースに応じて簡単または困難になります。

于 2013-06-10T13:21:08.017 に答える