请问以下sql怎么写
select * from table_1 a where a.id not in (select b.id from table_2 b where b.userId=”xxxxxx”)
或者
select * from table_1 a where not EXISTS(select 1 from table_2 b where b.userId=”xxxxxx” and a.id=b.id)
我的业务场景是 table_1 是一个帖子集合,table_2 是一个用户已经查看过的帖子集合,我现在需要查询用户没有查看过的帖子列表,所以table_2 中一定要加一个userId的查询条件。
5433zzz 编辑问题
sql 可以改写成这种形式:
select * from table_1 a
inner join table_2 b on a.id = b.id
where b.id is not null;
对应的mql 是:
db.getCollection(“table_1”).aggregate(
[
{
“$project” : {
“_id” : NumberInt(0),
“a” : “$$ROOT”
}
},
{
“$lookup” : {
“localField” : “a.id”,
“from” : “table_2”,
“foreignField” : “id”,
“as” : “b”
}
},
{
“$unwind” : {
“path” : “$b”,
“preserveNullAndEmptyArrays” : false
}
},
{
“$match” : {
“b.id” : {
“$ne” : null
}
}
}
]
);
5433zzz 发表新评论
这个改写不对 select * from table_1 a inner join table_2 b on a.id = b.id 就已经只查询存在的数据了。我需要不存在的数据,在加where是没有效果的。 我的业务场景是 table_1 是一个帖子集合,table_2 是一个用户已经查看过的帖子集合,我现在需要查询用户没有查看过的帖子列表。所以table_2 需要一个userId作为查询条件, select * from table_1 a where a.id not in (select b.id from table_2 b where b.userId=”xxxxxx”)