首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中使用SqlBuilder创建动态查询

在java中使用SqlBuilder创建动态查询
EN

Stack Overflow用户
提问于 2018-05-22 06:42:19
回答 1查看 2.1K关注 0票数 1

您能帮助我在哪里创建sql查询吗?

代码语言:javascript
复制
SELECT * FROM classicmodels.offices t1 INNER JOIN classicmodels.employees t0 
  ON (t1.officeCode = t0.officeCode) INNER JOIN classicmodels.customers t2 ON 
  ( (t0.employeeNumber = t2.salesRepEmployeeNumber) OR (t0.firstName = 
  t2.contactFirstName) ) WHERE (t2.creditLimit > 70000) AND (t2.creditLimit < 
  100000) OR (t0.officeCode = 6)
ORDER BY
t0.firstName ASC

我无法创建,请告诉我如何在单次查询中创建和或或同时使用这两个条件。

代码语言:javascript
复制
WHERE (t2.creditLimit > 70000) AND (t2.creditLimit < 100000) OR (t0.officeCode = 6)

如何创建动态查询可以超过一次和一次条件,或者可能超过一次或一次条件。情况是随机的。然后我要创建查询。你能帮我..。

EN

回答 1

Stack Overflow用户

发布于 2018-11-22 14:26:04

我不确定"SqlBuilder“是否是一个特定的库,因为有几个库有一个SqlBuilder类(例如MyBatis),还有一些库是SqlBuilder(例如jOOQ)。因此,我将为jOOQ (我为供应商工作)回答这个问题。

使用jOOQ

假设您使用的是代码生成器,则可以这样编写查询:

代码语言:javascript
复制
// Aliasing is not necessary in your case, but here it is, still:
Offices t1 = OFFICES.as("t1");
Employees t0 = EMPLOYEES.as("t0");
Customers t2 = CUSTOMERS.as("t2");

Result<?> result =
ctx.select()
   .from(t1)
   .join(t0).on(t1.OFFICECODE.eq(t0.OFFICECODE))
   .join(t2).on(t0.EMPLOYEENUMBER.eq(t2.SALESREPEMPLOYEENUMBER)
            .or(t0.FIRSTNAME.eq(t2.CONTACTFIRSTNAME)))
   .where(t2.CREDITLIMIT.gt(70000))
   .and(t2.CREDITLIMIT.lt(100000))
   .or(t0.OFFICECODE.eq(6))
   .orderBy(t0.FIRSTNAME)
   .fetch();

使用其他特定的SqlBuilder

如果您的特定SqlBuilder无法处理您编写的谓词的类型,那么您也许可以这样重写它:

代码语言:javascript
复制
WHERE (t2.creditLimit BETWEEN 70001 AND 99999) OR (t0.officeCode = 6)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50461344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档