【问题标题】:Search query to fetch data搜索查询以获取数据
【发布时间】:2016-06-18 08:40:11
【问题描述】:

我想编写搜索查询,它根据多个条件(如 ID、姓名和出生日期)从学生表中获取数据。 如果我使用像

这样的 OR 条件
Select * from students where Id='101' or name='Kumar' or age='21';

如果输入任何一个字段,它将返回。如果输入了多个字段,它只会首先考虑。 如果我使用 AND 条件,例如

Select * from students where Id='101' and name='Kumar' and age='21';

只有在输入所有字段后才会返回。如果任何一个字段为空,它将返回零,我的意思是它将返回空。即使某些字段为空,我也想得到结果。

如果我没有在其中一个字段中输入文本,我正在将此采石场用于摇摆应用程序,那么它将变为空,就像 I'd='' not null 在这种情况下如何获得结果

Select * from students where Id='' and name='' and age='21'

【问题讨论】:

    标签: mysql sql swing jdbc plsql


    【解决方案1】:

    即使有些字段是空的,我也想得到结果。

    然后将其包含在您的条件中。像这样的:

    WHERE
        (Id = '101' OR Id IS NULL) AND
        (name = 'Kumar' OR name IS NULL) AND
        (age = '21' OR age IS NULL)
    

    括号中的嵌套条件允许您构建相当复杂的条件逻辑。您如何定义查找要查找的记录的逻辑完全取决于您。

    【讨论】:

    • 感谢大卫,我的要求有所不同。我在下面发帖
    • @ShimbuGowda:您确实应该使用其他信息更新问题,而不是将其发布为答案。无论如何,这如何改变需求?如果您想在条件中使用空字符串而不是 NULL,请使用空字符串。你可以在条件中加入任何你想要的逻辑。
    【解决方案2】:

    使用不带%s 的LIKE 子句。所以它将充当一个简单的=。以下是它的工作原理。

    if(txtId.getText().equals("")){
      String id = "%%";
    }else{
      String id = txtId.getText();
    }
    
    if(txtName.getText().equals("")){
      String name = "%%";
    }else{
      String name = txtName.getText();
    }
    
    if(txtAge.getText().equals("")){
      String age = "%%";
    }else{
      String age = txtAge.getText();
    }
    
    resultset = statement.executeQuery("SELECT * FROM student WHERE id LIKE '"+ id +"' and name LIKE '"+ name +"' and age LIKE '"+ age +"';");
    

    试试这个。它会像一个魅力一样工作。 (取决于您的数据库更改查询)

    【讨论】:

    • 如果我像这样使用,我会得到相对不准确的
    • 不,你不会。这就是为什么我提到不要使用%s。先试试看。如果这对您有用,请标记为正确答案。
    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多