2017-04-18 10 views
0

ID「Col1」と「Col2」と「Col3」を含むテーブル「テーブル」があります。 Col2は0または1のどちらでもかまいません。Col1が同じ値を持つ行のCol2が必要です。 MySQLはチェック制約をサポートしている場合でも 例別の列に基づく列の制約

私はこの

+----+-------+------+-----------+ 
| ID | Col1 | Col2 | Col3 | 
+----+-------+------+-----------+ 
| 1 | "One" | 0 | "Yeah" | 
| 2 | "One" | 0 | "Meh"  | 
| 3 | "One" | 0 | "Why Not" | 
| 4 | "Two" | 1 | "Huh"! | 
+----+-------+------+-----------+ 

そしてない

+----+-------+------+-----------+ 
| ID | Col1 | Col2 | Col3 | 
+----+-------+------+-----------+ 
| 1 | "One" | 0 | "Yeah" | 
| 2 | "One" | 0 | "Meh"  | 
| 3 | "One" | 1 | "Why Not" | (Normally it must be 0 or line 1 and 2 
| 4 | "Two" | 1 | "Huh"! | Must be "1") 
+----+-------+------+-----------+ 
+1

期待される出力を見ても、あなたが望むものが明確ではありません。ただし、他の列の値に基づいて 'col2'を作成したい場合は、計算された列です。データを取得するときに、計算された値を格納しないようにしてください。 –

+1

に入力テーブルのデータが記載されていて、出力に希望するものが –

+0

と関連している可能性があります:http://stackoverflow.com/questions/7522026/how-do-i-add-a-check-constratint-to-a-table? - あなたの状態がチェックされるはずです:入力時、または更新スクリプトを作成したいのかどうかは不明です。 – cypherabe

答えて

0

ような何かをしたい、あなたはcheck制約でこれをしないだろう。私は最善の方法は、外部キーの制約を使用していると思う。

あなたはcol1/col2有効な値を有する第二のテーブルが必要になります。

create table Col1Col2 as (
    col1 varchar(255) not null primary key, 
    col2 int not null, 
    unique (col1, col2) -- this is not strictly necessary see below 
); 

次に、あなたのテーブルには、次のようになります。

create table t as (
    id int auto_increment primary key, 
    col1 varchar(255) not null, 
    col2 int not null 
    col3 int, 
    constraint fk_t_col1_col2 foreign key (col1, col2) references col1col2(col1, col2) 
); 

しかし、私もtcol2を保管しないでしょう。代わりにtから削除し、値をcol1col2にルックアップしてください。

基本的な問題は、この要件では別のエンティティがあることを示唆しているため、データをリレーショナル形式で格納していないことです。

+0

私がOracleを使用している場合はどうなりますか? – Elmehdi93

+0

@ Elmehdi93。 。 。かなり同じこと。データを格納する適切な方法は、実行しているデータベースと密接に関連していません(相違点はありますが、エンティティの定義には通常ありません)。 –

関連する問題