有没有办法在MySQL的“where”语句中使用通配符?

时间:2009-10-28 00:47:56

标签: sql mysql

我有一个使用where子句的查询。有时,这可能会被使用,而在其他人,我可能想完全省略它以取回所有结果。我当然可以写两个不同的查询,但我想减少任何代码,我可以出于简单的原因。有没有办法在mysql中执行此操作?

进行如下查询:

SELECT * FROM my_table WHERE id = '3'

SELECT * FROM my_table

有没有办法使用热门查询并仍然可以取回所有记录?

6 个答案:

答案 0 :(得分:2)

不,因为第一个查询中的谓词实际上可能无法从表中检索所有记录;它可以使用索引,这样它只需要获取查询需要返回的特定记录。

如果您想保留相同表单的谓词但仍然返回所有结果,则需要执行以下操作:

where id = 3 or id <> 3

或者这个:

where id = id

请注意,如果or id is null为空,则必须添加id

如果您只想在查询中使用谓词,这就足够了:

where 1

但这只是多余的,你也可以把谓词留下来。

答案 1 :(得分:1)

如果我理解你的问题,那么是

SELECT * FROM my_table WHERE 1=1

答案 2 :(得分:1)

如果你正在构建SQL查询,并且你决定在最后一刻你想要否定/忽略查询的“WHERE”部分,你可以追加{ {1}}到你的where子句。请记住,逻辑上,对于所有 X,X OR TRUE都是正确的。

OR 1

请注意,我必须在其中添加sqlite> SELECT id FROM moz_downloads WHERE id < 405 LIMIT 10; 80 403 404 sqlite> SELECT id FROM moz_downloads WHERE id < 405 OR 1 LIMIT 10; 80 403 404 405 407 408 409 410 411 412 以获得不太多的演示结果,但第二个语句的where子句为LIMIT 10

这取决于应用程序,但您可能会或可能不会在运行时生成查询。有些查询总是相同的,例如id < 405 or 1,但有些查询会像在运行中一样生成。在后一种情况下,您可能会有类似

的内容
SELECT * FROM recent_files

注意:根据您的SQL引擎,您可能需要something = make_safe_for_sql(get_something_from_user()) query = "SELECT * FROM data WHERE something=" + something if should_ignore_something: query += " OR 1" database.execute(query) 来评估布尔值为真。

答案 3 :(得分:1)

更多的思考......

我注意到你引用了'3'。如果你的id是char数据,你可以使用LIKE字符串比较运算符。

单个值

SELECT * FROM my_table WHERE id LIKE '3'

对于所有值

SELECT * FROM my_table WHERE id LIKE '%'

虽然不会给你任何带有NULL id的值。

答案 4 :(得分:0)

你的问题很可疑。你真的说当没有id==3时,应该返回所有条目。如果你拉出所有条目,然后使用php对它们进行排序,你可以轻松地做到这一点:

$sql = mysql_query("SELECT * FROM my_table");
while($row = mysql_fetch_array($sql) {
    if($row['id']==3)
        // do something
}

但随着表格的增长,这将给数据库带来巨大压力。您应该使用多个查询并对第二个查询强制执行某种限制。

// try to get id == 3
SELECT * FROM my_table

// if id == 3 returns 0 results
SELECT * FROM my_table LIMIT 5

希望它有所帮助!

答案 5 :(得分:0)

您必须使用动态SQL,例如

  

“SELECT * FROM my_table WHERE id”&amp;   限定符

然后将限定符设置为“='3'”或“1”。