我正在使用ACCESS DB。
我有1个表(tblData),其中包含1列(DataId)和3个条目:
tblData (A)
+--------+
| DataId |
+--------+
| 1 |
| 2 |
| 3 |
+--------+
另一个表(tblSelections)包含3列(id,dataid,userid)并有3个条目:
tblSelections (B)
+----+--------+---------+
| id | dataid | userid |
+----+--------+---------+
| 1 | 1 | 5 |
| 2 | 2 | 5 |
| 3 | 3 | 2 |
+----+--------+---------+
如何从表A(tblData)中选择某些'userid'不在tbl B(tblSelections)中的记录?
对于'userid'5,查询必须从表A返回'DataId'3作为dataid 1&对于用户标识5,表B中已经存在2。
对于'userid'2,查询必须返回'DataId'1&来自表A的图2中的数据ID 3已存在于表B中,用于用户ID 2。
对于'userid'1,查询必须返回'DataId'1,2&表A中的3表示用户ID 1的表B中没有记录
答案 0 :(得分:1)
对您的查询使用EXISTS或IN:
SELECT *
FROM tblData
WHERE DataId NOT IN
(
SELECT dataid
FROM tblSelections
WHERE userid = 5
);
SELECT *
FROM tblData
WHERE NOT EXISTS
(
SELECT *
FROM tblSelections
WHERE tblSelections.dataid = tblData.DataId AND tblSelections.userid = 5
);
答案 1 :(得分:0)
您可以使用外部联接来选择所有记录,然后在where
子句中添加b
中不可为空的列为null
的条件。这将根据加入条件为a
中b
中没有匹配行的所有记录提供。
此查询假定您有一个名为@userid
的参数或变量,表示要搜索的用户ID。
select
a.*
from tblData a
left join tblSelections b on b.dataid = a.dataid and b.userid = @userid
where b.id is null