だから私はこのテーブルを持っています:
PK | FK1 | FK2
1 | 1 | 2
2 | 1 | 3
3 | 1 | 6
4 | 2 | 1
5 | 2 | 6
6 | 5 | 3
PKは主キー(dur)です。FK1とFK2は、他のテーブルの同じ列への外部キーです(関連性はありません)。
クエリタイプ1
FK1=xであるすべての行を取得したいと思います。同時に、FK2=yの行は含めたくありません。yはFK1であり、FK2=xです。別の言い方をすれば、FK1 = xですが、FK2=xであるテーブルのFK1の値とFK2を等しくすることはできません。たとえば、x = 1:
PK | FK1 | FK2 | Returned in Result Set (Yes = √, No = x)
1 | 1 | 2 | x
2 | 1 | 3 | √
3 | 1 | 6 | √
4 | 2 | 1 | x
5 | 2 | 6 | x
6 | 5 | 3 | x
FK1!= 1であるため、PK> = 4の行は結果セットに含まれていません。ただし、PK = 1の行は結果セットに含まれていませんが、FK1 = 1です。なぜですか?FK2 = 2であるため、PK=4の行でFK2=xまたは1の場合にFK1が等しくなります。問題が発生した場合はそれを数回読んでください。
クエリタイプ2
これは、最初のタイプのクエリとほとんど同じです。FK2 = xおよびFK1!= y、y = FK2、FK1=xのすべての行を取得したいと思います。同じですが、列だけが逆になっています。私の焦点はFK1ではなくFK2です。
クエリタイプ3
FK2 = yの場合にのみ、FK1=xであるすべての行を取得したいと思います。y = FK1ここで、FK2=x。うまくいけば、ここでxとyを使用して規則に従っているので、あまり説明する必要はありません。これが例です、x = 1:
PK | FK1 | FK2 | Returned in Result Set (Yes = √, No = x)
1 | 1 | 2 | √
2 | 1 | 3 | x
3 | 1 | 6 | x
4 | 2 | 1 | x
5 | 2 | 6 | x
6 | 5 | 3 | x
最初の行のみが返されます(PK = 1)。なぜですか。FK1 = xまたは1であり、FK2 = yまたは2であるため、これはFK1であり、FK2 = 1です(行4)。
男、私はこれが理にかなっていることを願っています。意味がわからなくなったところを教えてください。編集します。
読んでくれてありがとう。すべての助けに感謝します。