首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SQL字符串中插入多个where子句

如何在SQL字符串中插入多个where子句
EN

Stack Overflow用户
提问于 2019-06-11 23:10:25
回答 2查看 98关注 0票数 1

我正在使用一个带有SQL语法的Azure Cosmos NoSQL数据库。如何创建可以动态添加更多WHERE语句的SQL字符串?例如,如果我有两个where语句,我希望能够不必在"WHERE f.%s=@val“中为一个函数编写代码,然后使用"WHERE f.%s=@val1和f.%s=@val2”硬编码另一个函数。我希望最多有7条WHERE语句。

下面的代码查询一个属性(一个WHERE语句)和另一个查询两个属性(两个WHERE语句)。这涉及到大量的硬编码。与queryString的线路是我遇到麻烦的地方。

代码语言:javascript
复制
public Iterable<Document> queryForOneProperty(String databaseName, String 
    collectionName, String key, String val) {

    FeedOptions queryOptions = getDefaultFeedOptions();
    String collectionLink = String.format("/dbs/%s/colls/%s", databaseName, collectionName);

    SqlParameterCollection paramCollection = new SqlParameterCollection();
    paramCollection.add(new SqlParameter("@val", val));
    SqlQuerySpec query = new SqlQuerySpec(String.format("SELECT * FROM %s f WHERE f.%s = @val", collectionName, key), paramCollection);

    return query;
}

public Iterable<Document> queryForTwoProperties(String databaseName, String 
    collectionName, String[] keys, String[] vals) {

    FeedOptions queryOptions = getDefaultFeedOptions();
    String collectionLink = String.format("/dbs/%s/colls/%s", databaseName, collectionName);

    SqlParameterCollection paramCollection = new SqlParameterCollection();
    paramCollection.add(new SqlParameter("@val1", vals[0]));
    paramCollection.add(new SqlParameter("@val2", vals[1]));
    String queryString = String.format("SELECT * FROM %s f WHERE f.%s = @val1 AND f.%s = @val2", collectionName, keys[0], keys[1]);
    SqlQuerySpec query = new SqlQuerySpec(queryString, paramCollection);

    return query;
}

“”“

EN

回答 2

Stack Overflow用户

发布于 2019-06-11 23:37:33

您可以创建一个伪造的第一个条件,然后只添加和...

代码语言:javascript
复制
String condition = "WHERE 1 = 1";

if (some logic) {
    condition += " AND x = 42";
}

下面是一个查询工厂方法的简单示例

代码语言:javascript
复制
private final static String BASE_QUERY = "SELECT * FROM %s f WHERE 1 = 1";

public static String queryBuilder(String ... conditions) {
    StringBuilder builder = new StringBuilder(BASE_QUERY);
    for (String condition : conditions) {
        builder.append(" ");
        builder.append(condition);      
     }
     return builder.toString();
}

示例

代码语言:javascript
复制
System.out.println(queryBuilder("AND f.%s = @val1", "AND f.%s = @val2"));
System.out.println(queryBuilder("AND f.%s = @val1"));
System.out.println(queryBuilder());

给出

SELECT * FROM %s f WHERE 1=1和f。%s= @val1和f。%s= @val2

SELECT * FROM %s f WHERE 1=1 AND f.%s = @val1

SELECT * FROM %s f WHERE 1= 1

票数 0
EN

Stack Overflow用户

发布于 2019-06-11 23:38:20

尝试此用法为空

代码语言:javascript
复制
SELECT * FROM %s f WHERE (@val1 is null or f.%s = @val1) AND (@val2 is null or f.%s = @val2) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56546756

复制
相关文章

相似问题

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