以下SQL查找所有没有任何名为“BadTag”的关联标记的帖子。
select * from post t1
where not exists
(select 1 from tag t2
where t1.id == t2.post_id and t2.name=='BadTag');
如何在Peewee ORM中编写此功能?如果我按照
的方式写一些内容Post.select().where(
~Tag.select()
.where(Post.id == Tag.post & Tag.name=='BadTag')
.exists()
)
它被编译为
SELECT "t1"."id", ... FROM "post" AS t1 WHERE ? [-1]
像
这样的东西Post.select().join(Tag).where(Tag.name!='BadTag')
不起作用,因为帖子可以有很多标签。
我是SQL / Peewee的新手,所以如果这是一个糟糕的方式,我会欢迎指点。
答案 0 :(得分:3)
不要使用manecosta的解决方案,效率低下。
以下是如何使用子查询执行NOT EXISTS:
$scope.showCreateForm = function(){
// clear form
$scope.clearForm();
// change modal title
$('#modal-product-title').text("Create New Product");
// hide update product button
$('#btn-update-product').hide();
// show create product button
$('#btn-create-product').show();
// show modal
$('#modal1').show();
}
您也可以加入:
(Post
.select()
.where(~fn.EXISTS(
Tag.select().where(
(Tag.post == Post.id) & (Tag.name == 'BadTag'))))