2009-06-11 6 views
0

私はテーブルを持っているので、このテーブルにはIDを持つ2つのカラムがあります。私は列の1つを区別したい、そして特定のIDの第2列からすべてを選択するようにしたいと思います。Distinct Help

はもともと私が試した:

select distinct inp_kll_id from kb3_inv_plt where inp_plt_id = 581; 

しかし、これは最初のWHERE句を行い、その後、異なる値を返します。あるいは

:異なるのみ列ではなく、テーブル全体を返すため

select * from (select distinct(inp_kll_id) from kb3_inv_plt) as inp_kll_id where inp_plt_id = 581; 

しかし、これはカラムinp_plt_idを見つけることができません。

提案がありますか?

編集:

各kll_idは、一つ以上のplt_idを有することができます。私は特定のkb3_inv_pltのIDに対してユニークなkll_idを使用したいと思います。あなたは、(ないDistinctためのSQLセマンティクス) "一度だけ起こるだけinp_kll_id Sを選ぶ"、 "明確な作り" の意味ならば

| inp_kll_id | inp_plt_id | 
|  1941 |  41383 | 
|  1942 |  41276 | 
|  1942 |  38005 | 
|  1942 |  39052 | 
|  1942 |  40611 | 
|  1943 |  5868 | 
|  1943 |  4914 | 
|  1943 |  39511 | 
|  1944 |  39511 | 
|  1944 |  41276 | 
|  1944 |  40593 | 
|  1944 |  26555 | 
+0

いくつかの例と期待される出力を与えてください。あなたは "一度だけ起こる最初のidの値を選ぶ"(これはSQLセマンティクスではありません)という意味の "make distinct"とほとんど同じように見えますが、これは私の考えで読んだものです。 –

+0

私はまだそれを得ることはできません...最初に試したものはうまくいくはずです – Greg

答えて

2

、これは動作するはずです:

select inp_kll_id 
from kb3_inv_plt 
group by inp_kll_id 
having count(*)=1 and inp_plt_id = 581; 
+0

これは、plt_id列が出力のために '取り除かれます。 にそれを変更する 'inp_kll_id 持つCOUNT(*)= 1とinp_plt_id = 581でkb3_inv_plt グループから* を選択し;' 働いた、ありがとう! – puttputt

1

すべて取得最初の別名(次の例では別名 'a')を指定し、指定した条件(次の例では別名 'b')を持つ表に戻します。この表の

SELECT  * 
FROM  (
      SELECT 
      DISTINCT inp_kll_id 
      FROM  kb3_inv_plt 
      ) a 
LEFT JOIN kb3_inv_plt b 
     ON a.inp_kll_id = b.inp_kll_id 
WHERE  b.inp_plt_id = 581 
0

IDの持つ2つの列です。私は の列のうちの1つを別個にしたい場合は、 という文字列を特定のIDの第2列の からすべて選択するようにしてください。

SELECT distinct tableX.ID2 
FROM tableX 
WHERE tableX.ID1 = 581 

私は明確なのあなたの理解は、それがどのように動作するかは異なるかもしれないと思います。これは実際にwhere句を最初に適用し、次にtableX.ID2の一意のエントリの別個のリストを取得します。これはあなたの質問の最初の部分で求めているものです。

行を区別することで、他の行がまったく同じでないことを確認できます。あなたは列を区別していません。のは、あなたのテーブルは、このデータを持っているとしましょう:あなたは明確なID1、ID2を選択すると

ID1 ID2 
10 4 
10 3 
10 7 
4  6 

は - 行がすでに異なっているので、あなたは*選択と同じを取得します。

あなたは何をしようとしているかを明確にするための情報を追加できますか?