我正试图使用this document和this question对下表进行关系划分(抱歉荷兰语措辞)。
voedsel_id dier_id
1005 1006
1004 1006
1005 1005
1005 1004
1004 1004
1001 1003
1001 1002
1001 1001
让我们对以下内容进行查询。
SELECT DISTINCT dier_id
FROM Dieren_voedsel AS X
WHERE NOT EXISTS(
SELECT voedsel_id
FROM Dieren_voedsel AS Y
WHERE Y.dier_id = 1006 AND NOT EXISTS(
SELECT voedsel_id
FROM Dieren_voedsel AS Z
WHERE X.voedsel_id = Z.voedsel_id AND Y.dier_id = Z.dier_id
)
)
ORDER BY dier_id;
让以下意外输出。
dier_id
1004
1005
1006
我认为这个分区会输出所有与dier_id 1006具有完全相同的voedsel_id值的dier_id元组。但是,它包括dier_id 1005,它只有voedsel_id 1005而dier_id 1006有voedsel_id 1004和1005.我认为这只会返回dier_id 1004和1006。 有没有我做错了或者我不知道关系师如何运作?
答案 0 :(得分:4)
在您最里面的子查询中,您得到X
和Y
错误的引用:
SELECT DISTINCT dier_id
FROM Dieren_voedsel AS X
WHERE NOT EXISTS(
SELECT *
FROM Dieren_voedsel AS Y
WHERE Y.dier_id = 1006
AND NOT EXISTS(
SELECT *
FROM Dieren_voedsel AS Z
WHERE Z.dier_id = X.dier_id
AND Z.voedsel_id = Y.voedsel_id
)
)
ORDER BY dier_id;