带逆蕴涵的SQLite连接

带逆蕴涵的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和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, 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)
                 );