4

テーブル内の複数の列に対して個別の値を取得しようとしています。

たとえば、テーブルに列として COL1、COL2、COL3 があり、次のようなクエリを実行している場合

SELECT DISTINCT COL1, COL2, COL3 FROM TABLEx

しかし、列の1つのデータに応じて、他の2つの列で重複した値が得られます。COL1 に 40 個の一意の値があり、COL2 に 10 個の一意の値しかなく、COL3 に 5 個の一意の値があるとします。COL1 が一意で、COL2/COL3 が重複する値を持つ 40 行のデータを取得しています。各列の DISTINCT 値を取得し、重複する値を null 値に置き換えるにはどうすればよいですか。これは、Web ページのドロップダウン リストの個別の値を取得するためだけに行っています。フィールドごとに個別のクエリをいつでも実行できますが、あまり効果的ではないと思います。私がこれにどのようにアプローチするかについて何か助けはありますか?

4

5 に答える 5

4

フィールドごとに個別のクエリをいつでも実行できます

はい!これを行う!

しかし、あまり効果的ではないと思います。

たぶん大丈夫です。各列に個別のインデックスを追加することで、パフォーマンスを向上させることができます。それでも遅いのではないかと心配な場合は、測定して確認してください。それが本当に問題であることが判明した場合は、キャッシュの使用を検討することをお勧めします。

于 2012-08-13T19:32:18.803 に答える
0

単一のクエリを使用しましたが、resultSetを取得したときにのみ、Setを使用して一意の値を格納することになりました。そうすれば、複数のクエリを使用してデータベースをロードすることはありません。

于 2012-08-17T14:27:49.717 に答える
0

これがあなたが探しているものであるかどうかは完全にはわかりません。また、個別のクエリよりもわずかに効率的です。

select distinct a, null, null
  from MyTable
 union
select distinct null, b, null
  from MyTable
 union 
select distinct null, null, c
  from MyTable

注:これは確かにSQLクエリを作成する正しい方法ではありませんが、質問に対する可能な解決策を提供します。

于 2012-08-13T19:39:42.460 に答える
0

ご使用のSybaseのバージョンにrow_nubmer()が含まれている場合は、unionallを使用してこれを行うことができます。

select seqnum, max(col1) as col1, max(col2) as col2, max(col3) as col3
from ((select row_number() over (order by col1) as seqnum
              col1, NULL as col2, NULL as col3
       from (select distinct col1
             from t
            ) t
      ) union all
      (select row_number() over (order by col2) as seqnum
              NULL as col1, col2, NULL as col3
       from (select distinct col2
             from t
            ) t
      ) union all
      (select row_number() over (order by col3) as seqnum
              NULL as col1, NULL as col2, col3
       from (select distinct col1
             from t
            ) t
      )
     ) t
group by seqnum
order by seqnum

これにより、各値にシーケンス番号が追加され、groupbyを使用してそれらが結合されます。

于 2012-08-13T19:40:14.443 に答える
-1
SELECT DISTINCT c1, c2 FROM t

も使えます

SELECT c1, c2 FROM t GROUP BY c1, c2

それは私のために働いた。

于 2013-07-04T13:21:41.110 に答える