Peewee SQL查询连接中没有多个匹配

时间:2016-03-09 23:20:32

标签: python sql sqlite peewee

以下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的新手,所以如果这是一个糟糕的方式,我会欢迎指点。

1 个答案:

答案 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'))))