2016-09-07 4 views
0

私はOracleを使用していますが、主な目的は列の一意の値をtable b(Field1)から表示することです。

1つの列で一意の値を選択しても、他の列がマルチテーブルに表示される

SELECT A.FIELD1, MAX(B.FIELD1) AS "UNIQUE", B.FIELD2, B.FIELD3, C.FIELD3, D.FIELD4 
FROM A 
INNER JOIN B ON B.FIELD4 = A.FIELD1 
INNER JOIN C ON C.FIELD2 = B.FIELD1 
INNER JOIN D ON D.FIELD3 = C.FIELD3 
GROUP BY A.FIELD1, B.FIELD1, B.FIELD2, B.FIELD3, C.FIELD3, D.FIELD4 
ORDER BY A.FIELD1, D.FIELD4 ASC 

データ構造は、私はしかし、私はこれを達成することはできません、データごとに1つだけの行を表示したい

A 
FIELD1 FIELD2 FIELD3 FIELD4 
ABC  DEF  HIJ  KLM 

B 
FIELD1 FIELD2 FIELD3 FIELD4 
000  1X1  24D  ABC 
000  1X1  301  ABC 
000  1X1  135  ABC 

C 
FIELD1 FIELD2 FIELD3 FIELD4 
112  000  24D  SFD 

D 
FIELD1 FIELD2 FIELD3 FIELD4 
2RD  VCB  MNK  GGG 

です。助言がありますか?

+0

1. MAX(B.FIELD1)は必ずb.field3を24Dとして返しません。すべての 'field1'がセーブされているので、任意の行をランダムに取得できます。 2. 'D.FIELD3 = C.FIELD3'。これはあなたのシナリオには何も返されません。参加条件が正しいことを確認してください。 – Utsav

+0

Hm。私はそれを正しく説明していないと思う。しかし、基本的には、他のテーブルを結合した後でも、 'B.FIELD1'のユニークな値を取得したいのです。 – thebeast22

+0

この場合、 'B.FIELD1'の固有値は1つだけですが、なぜ' B.FIELD3'を '24D'で、' 301'や他の値ではないのですか?そこに論理は何ですか? – Utsav

答えて

0

あなたの質問に間違いがあります。最大値MAX(B.FIELD1)の計算には列B.FIELD1を使用しましたが、同時にこの列はGROUP BYセクションに使用しています。

関連する問題