【问题标题】:Is it possible to use "WHERE" clause to select all records in SQL Statement?是否可以使用“WHERE”子句来选择 SQL 语句中的所有记录?
【发布时间】:2013-10-25 20:37:08
【问题描述】:

晚上好,我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录?

下面是一些解释:

随机SQL语句(Java)-(JSP示例),正常情况

String SqlStatement = "SELECT * FROM table_example WHERE First_Col = '<%=passVar%>' ";
db.query(SqlStatement );
//........
//........

如果passVar为'ALL',当passVar = All时需要提示所有记录呢?我知道我可以使用 if-else 并检查 passVar 是否为“ALL”然后查询 without-WHERE 语句 以使其工作..

**without-WHERE statement (Java)-(JSP example)**
if(<%=passVar%> == "ALL") {
   SqlStatement = "SELECT * FROM table_example";
} else {

   SqlStatement = "SELECT * FROM table_example WHERE First_Col = '<%=passVar%>' ";
}

但是我可以只编写一条 SQL 语句来提示所有记录吗?如下所示:

(Java)-(JSP示例)

String ShowAll = "";
if(<%=passVar%> == "ALL") {
    ShowAll = *;

} else {
    ShowAll = <%=passVar%>;
}
SqlStatement = "SELECT * FROM table_example WHERE First_Col = ShowAll ";

【问题讨论】:

  • 您还在 JSP 中放置 scriptlet 代码吗?数据库调用?太可怕了。
  • 大声笑,我只能遵守公司的规则……真的很抱歉……

标签: java mysql sql sql-server


【解决方案1】:

试试WHERE 1=1::

Select * from myTable  WHERE 1=1

【讨论】:

  • OP 如何在脚本中插入它以仅使用一个查询?
【解决方案2】:

尝试使用通配符值'%',但我建议在此处使用工厂来创建 SQL 语句,您尝试执行的操作有点味道。

【讨论】:

    【解决方案3】:

    考虑在查询本身内移动特殊情况,例如

    SELECT * FROM table_example WHERE '<%=passVar%>' IN ('ALL', First_Col)
    

    【讨论】:

      【解决方案4】:

      这也有效:

      WHERE columnname LIKE '%'
      

      NULL 值除外。

      【讨论】:

      • 谢谢,我会试试...只是为了验证一下,如果我们将列名设为 LIKE '%',它是否会检索以''(空格)开头的数据?
      • 是的,它会这样做
      • 是否也可以包含 NULL 值?
      【解决方案5】:

      您可以做的其他事情是将代码和 SQL 组合成一个查询。这意味着 IF..ELSE 将使用 SQL 语言。

      查看这些链接了解更多信息:
      MySQL
      Using If else in SQL Select statement

      【讨论】:

        【解决方案6】:

        最好区分这两种情况并从中进行 2 次查询。

        • 如果没有 where 条件,则数据库不需要评估它(可能更快)
        • 源代码/调试输出更清晰。

        【讨论】:

        • 是的,目前我使用两个查询...但是我的一个朋友提到,当程序变大/更大时,最好找到一种方法来进行一次查询而不是 2 或更多,它是可选的...谢谢...
        • 你知道 - 这对我来说非常有意义,我完全停止了这种思路,只是又提出了一个问题。几行额外的代码与调试条件查询的噩梦之间的区别是显而易见的。
        【解决方案7】:

        在sqlserver上你可以制作proc:

        create proc select_all_on_null
        @a int
        as
        begin
          select * from Records where (@a is null or Record_id=@a )
        end
        

        当您选择成为您的程序时:

        make @a in null will select all 
        

        如果我是numder,将选择具有此ID的行

        【讨论】:

          【解决方案8】:

          where 1=1 对我有用,虽然使用了 where 子句,但所有记录都被选中。

          你也可以试试

          SELECT * FROM Customers
          WHERE CustomerID=CustomerID; /* query */
          

          或 [any_column_name]=[column_name_in_LHL]

          (LHL=左侧。)

          复制查询并 click here to try code

          【讨论】:

            猜你喜欢
            • 2015-07-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-01
            相关资源
            最近更新 更多