所以我有这张桌子:
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 不能等于 FK2 = x 表中 FK1 的任何值。例如,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
请注意,PK >= 4 的行不包含在结果集中,因为 FK1 != 1。但是,PK = 1 的行不包含在结果集中,而 FK1 = 1。为什么?因为 FK2 = 2,当 FK2 = x 或 1 在 PK = 4 的那一行时,这就是 FK1 的值。如果遇到问题,请多读几遍。
查询类型 2
这几乎就像第一种类型的查询。我想获取 FK2 = x 和 FK1 != y 的所有行,其中 y = FK2,其中 FK1 = x。相同,只是列颠倒了。我的重点是 FK2,而不是 FK1。
查询类型 3
我想获得 FK1 = x 的所有行,仅当 FK2 = y 时;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 行)。
伙计,我希望这是有道理的。告诉我我从哪里开始没有意义,我会编辑。
谢谢阅读。感谢所有帮助。