2011-02-21 11 views
1

コンポジット・プライマリ・キーの一部のみを使用してoracleのデータ・レコードを取得できますか?Oracleプライマリ・キー

例PK =のCol1 + Col2に+ COL3

SELECT * 
    FROM table 
WHERE Col1 = 'SomeDate' 

答えて

5

あなたは、そのクエリを提起することができますが、その列に一意制約がない限り、それはあなたの単一のレコードを与えないかもしれません。あなたがそうしたとしても、複合主キーを持つ理由はわかりません。

+1

複合主キーがあることは意味があります。コンポジットキーの一部でクエリを実行したいと思って、私は予想される結果が不思議です。 –

+0

あなたの洞察に感謝します。私はあなた方全員に同意する傾向があります。 – user627093

1

確かに、複合主キーであるため、クエリは一意または空の結果を返すことは保証されません。 Col1 + Col2 + Col3の1つのユニークな組み合わせであることが保証されています。 Jodyが1つの列に追加の一意制約を指定していない限り、同じCol1を持つ多くの列が存在する可能性があります。

1

はい、できます。それは完全に正常です。あなたは多対多のテーブルでこれを常に行います。

ここには複合主キーが含まれています。いくつかのテストデータと

create table student_grade(
    course_id varchar2(6) not null 
,student_id varchar2(12) not null 
,grade number   not null 
,primary key(student_id, course_id) 
); 

...:キーの部分に選択

COURSE STUDENT_ID  GRADE 
------ ------------ ---------- 
DB101 Ronnis    70 
DB102 Ronnis    70 
DB103 Ronnis    70 
DB101 user627093   70 

は完全に正常になります。

しかし
select * 
    from student_grade 
where course_id = 'DB101'; 

COURSE STUDENT_ID  GRADE 
------ ------------ ---------- 
DB101 Ronnis    70 
DB101 user627093   70 

は、あなたが決しては、単一のレコードを返すために、キーのサブセットのクエリに依拠することができることに注意してください。遅かれ早かれそのクエリは複数の行を返し、それに依存するロジックはすべて破棄されます。

関連する問題