|
▼ゆっぴぃ さん:
こんにちは。
>>ID と 品名 の2フィールドで Uniqueである(他のレコードと絶対に被らない)事を
>>テーブルに明示的に書いてあげないと更新ができません。
>とのことですが、これはフィールドの中に同じ値があってはいけないということ
>なのでしょうか?
ID の中で重複、品名の中で重複は許されますが、
IDと品名を合わせると重複は許されない、という事ですね。
ID 品名
1 りんご
2 りんご
2 なし
2 なし ← これはダメ
例として、
テーブルA
ID 品名 価格
1 りんご 100
2 みかん 50
3 なし 150
テーブルB
ID 品名 価格
1 りんご null
3 ぶどう null
1 りんご null
SELECT テーブルB.ID, テーブルB.価格
FROM テーブルA
LEFT JOIN テーブルB
ON (テーブルA.ID = テーブルB.ID) AND (テーブルA.品名 = テーブルB.品名)
WHERE テーブルB.ID Is Not Null;
ID 価格
1 null
1 null
このような状態になると、価格フィールドを更新したくても
テーブルBのどちらのレコードなのかという区別がつかないため、
一意制約が必要となります。
(前回の回答ではテーブルAにもIndexをつけましたが、
正確にはテーブルBのみIndexをつければ更新は可能です。)
>重なるデータがある場合にはインデックスは使えない・・・のかな??
結合しているフィールド(上記例の場合はID、品名)に
重複がある場合は Index を使う方法はできませんね。
データの中身は適当で良いので
ゆっぴぃさんの使っているテーブルの情報をご提示して頂くと
もうちょっとピンポイントな回答ができるかもしれません。
|
|