我有一个使用where子句的查询。有时,这可能会被使用,而在其他人,我可能想完全省略它以取回所有结果。我当然可以写两个不同的查询,但我想减少任何代码,我可以出于简单的原因。有没有办法在mysql中执行此操作?
进行如下查询:
SELECT * FROM my_table WHERE id = '3'
和
SELECT * FROM my_table
有没有办法使用热门查询并仍然可以取回所有记录?
答案 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”。