带逆蕴涵的SQLite连接
我有两张桌子,A和B:带逆蕴涵的SQLite连接,sql,sqlite,Sql,Sqlite,我有两张桌子,A和B: A.id A.name B.id B.A_id <-- points to A in a many to one relationship B.tag <-- predefined integer 结果返回需要是这样的,即它将返回所有返回的A和B,它们只在1,2,3中,而不在4,5中 若返回的任何一个连接包含一个具有排除标记的B.tag,那个么即使存在一个具有有效B.tag的A连接,我们也不应该看到它被返回 i、 e 执行查询时: SELECT A.id,
A.id
A.name
B.id
B.A_id <-- points to A in a many to one relationship
B.tag <-- predefined integer
结果返回需要是这样的,即它将返回所有返回的A和B,它们只在1,2,3中,而不在4,5中
若返回的任何一个连接包含一个具有排除标记的B.tag,那个么即使存在一个具有有效B.tag的A连接,我们也不应该看到它被返回
i、 e
执行查询时:
SELECT A.id, B.id, B.tag FROM A INNER JOIN B ON A.id = B.a_id
WHERE (B.tag IN (10) AND B.tag NOT IN (11)
这不会返回任何内容,因为我们在(11)排除中没有
。这可能吗?我觉得你的解释有点难以理解。我想您希望不存在
:
SELECT A.name, B.name, B.tag
FROM A INNER JOIN
B
ON A.id = B.a_id
WHERE B.tag IN (1, 2, 3) AND
NOT EXISTS (SELECT 1
FROM B B2
WHERE B2.a_id = A.id AND B2.tag IN (4, 5)
);
SELECT A.id, B.id, B.tag FROM A INNER JOIN B ON A.id = B.a_id
WHERE (B.tag IN (10) AND B.tag NOT IN (11)
SELECT A.name, B.name, B.tag
FROM A INNER JOIN
B
ON A.id = B.a_id
WHERE B.tag IN (1, 2, 3) AND
NOT EXISTS (SELECT 1
FROM B B2
WHERE B2.a_id = A.id AND B2.tag IN (4, 5)
);