Having() 加入的 id 计数 table
Having() count of id's on joined table
我正在尝试在 OrmLite 中进行此查询:
select b.* from blog b
join blog_to_blog_category btbc on b.id = btbc.blog_id
join blog_category bc on btbc.blog_category_id = bc.id
where b.url like '%.com' and bc.id in (100, 583)
group by b.id
having count(distinct bc.id ) = 1
我不知道如何构造 Having() 方法。我可以看到有一个 Sql.CountDistinct()
方法,但我不知道如何将它与 Having() 一起使用。
我认为我需要按照以下方式做一些事情:
var q = db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where<BlogCategory>(x => Sql.In(x.Id, 100, 583))
.GroupBy<Blog>(bc => bc.Id)
.Having(x => Sql.CountDistinct("blog_category.id") == "2")
这给出了错误:
42883: operator does not exist: bigint = text
我看不出如何输入它来获取 table 列名称和 return 数字进行比较。
这个查询可以吗?
编辑
我通过显式设置 having expression 来解决这个问题
q.HavingExpression = $"having count(distinct {q.Table<BlogCategory>()}.{q.Column<BlogCategory>(bc => bc.Id)}) = 2";
我仍然很好奇是否有可能用流利的方式做到这一点api。
我刚刚在最新的 v5.11.1 中为 Having()
添加了多个类型的 table 重载,现在是 available on MyGet,这将允许您引用连接的 table类型表达式中的属性,例如:
var q = db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where<BlogCategory>(x => Sql.In(x.Id, 100, 583))
.GroupBy<Blog>(bc => bc.Id)
.Having<BlogCategory>(x => Sql.CountDistinct(x.Id) == 2)
我正在尝试在 OrmLite 中进行此查询:
select b.* from blog b
join blog_to_blog_category btbc on b.id = btbc.blog_id
join blog_category bc on btbc.blog_category_id = bc.id
where b.url like '%.com' and bc.id in (100, 583)
group by b.id
having count(distinct bc.id ) = 1
我不知道如何构造 Having() 方法。我可以看到有一个 Sql.CountDistinct()
方法,但我不知道如何将它与 Having() 一起使用。
我认为我需要按照以下方式做一些事情:
var q = db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where<BlogCategory>(x => Sql.In(x.Id, 100, 583))
.GroupBy<Blog>(bc => bc.Id)
.Having(x => Sql.CountDistinct("blog_category.id") == "2")
这给出了错误:
42883: operator does not exist: bigint = text
我看不出如何输入它来获取 table 列名称和 return 数字进行比较。
这个查询可以吗?
编辑
我通过显式设置 having expression 来解决这个问题
q.HavingExpression = $"having count(distinct {q.Table<BlogCategory>()}.{q.Column<BlogCategory>(bc => bc.Id)}) = 2";
我仍然很好奇是否有可能用流利的方式做到这一点api。
我刚刚在最新的 v5.11.1 中为 Having()
添加了多个类型的 table 重载,现在是 available on MyGet,这将允许您引用连接的 table类型表达式中的属性,例如:
var q = db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where<BlogCategory>(x => Sql.In(x.Id, 100, 583))
.GroupBy<Blog>(bc => bc.Id)
.Having<BlogCategory>(x => Sql.CountDistinct(x.Id) == 2)