5

晚上好,我很好奇是否可以在可以显示所有记录的 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 ";
4

8 回答 8

13

试试 WHERE 1=1::

Select * from myTable  WHERE 1=1
于 2013-10-17T11:21:26.390 回答
4

这也有效:

WHERE columnname LIKE '%'

NULL 值除外。

于 2013-10-17T11:26:06.390 回答
3

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

你也可以试试

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

或 [any_column_name]=[column_name_in_LHL]

(LHL=左侧。)

复制查询并 单击此处尝试代码

于 2020-01-04T10:37:00.210 回答
2

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

  • 如果没有 where 条件,则数据库不需要评估它(可能更快)
  • 源代码/调试输出更清晰。
于 2013-10-17T11:32:18.987 回答
1

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

SELECT * FROM table_example WHERE '<%=passVar%>' IN ('ALL', First_Col)
于 2013-10-17T11:24:44.173 回答
0

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

于 2013-10-17T11:24:41.553 回答
0

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

检查这些链接以获取更多信息:
MySQL
Using If else in SQL Select statement

于 2013-10-17T11:27:30.790 回答
-1

在 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 的行

于 2019-05-27T21:29:32.813 回答