我的数据库中的项A
和B
之间存在多对多关系
A B A_B_Join
============ ============ ===============
Id | ... Id | ... A_Id | B_Id
------------ ------------ ---------------
0 | ... 5 | ... 0 | 5
1 | ... 6 | ... 0 | 7
2 | ... 7 | ... 1 | 5
3 | ... 8 | ... 1 | 6
2 | 6
: : 2 | 7
: : 3 | 7
3 | 8
3 | 5
我试图举例说明,所有A
来自任意列表的B
都没有[7, 8]
,例如SELECT A.* FROM A INNER JOIN A_B_Join ON A.id=A_B_Join.A_id WHERE A_B_Join.B_Id NOT IN (:BIds)
到目前为止我所做的不正确的是:
BIds
其中[7, 8]
是我的列表A
。但是,这并不完全正确,因为它仍会选择那些不具有B_id
BIds
值的特定Query
行
我尝试过搜索类似于我的问题的示例和解决方案,但我不确定这种类型的print ("untf frame",self.view.convert(usernameTextField.frame, to: self.view ) )
print ("pwtf frame",self.view.convert(passwordTextField.frame, to: self.view ) )
是什么。我将不胜感激任何帮助或指出任何重复的问题
答案 0 :(得分:1)
您可以使用NOT EXISTS
。 内部查询将获得A
或7
的所有8
,但自NOT EXISTS
使用以来,它将显示{{1}的所有行1}}在内部查询中不存在。
A
答案 1 :(得分:1)
一种方法使用左反连接:
SELECT a.*
FROM A a
LEFT JOIN A_B_Join j
ON a.id = j.A_Id AND j.B_Id IN (7, 8)
WHERE
j.A_Id IS NULL;
请注意,这将包含所有 A
记录,这些记录与(7,8)中的B_Id
不匹配。这将包括A
记录,实际上这些记录在联结表中根本不加入任何内容。如果需要,我们可以将此逻辑更改为仅包含不在(7,8)中的匹配。