我有一张桌子说Table1有column1,column2.column3
现在我运行一个选择查询:
Select * from Table1
返回所有行。
另一个查询
Select * from Table1 where column1 like '%%'
也会返回所有行。 第一个是简单的常规sql select查询。为什么第二个行为类似于第一个? 有人能告诉我吗?
答案 0 :(得分:1)
不同之处仅在于,第二个过滤器没有过滤任何东西。
(category_name:bathroom AND reno_wall_colours:red)
运算符的工作原理是搜索字段中的文本或部分文本。 LIKE
是一个通配符,用于替换一组字符(任意数量)。
在您的情况下,第二个查询将返回所有行,因为您的给定过滤器%
正在评估所有行。
就像这样。
想象一下,您的字段column1 like '%%'
具有这些值
column1
因此,如果您使用foo
bar
goo
boo
zar
,那么您对数据库说:向我提供column1 like '%%'
中的文本以任何内容(任何时间)开头并以任何内容结尾的所有行。所以一切。如果您使用column1
但如果您使用column1 like '%'
,它会给您答案column1 like '%oo%'
,或者如果您使用foo, goo and boo
,则会column1 like '%r'
希望它能帮助你理解。
答案 1 :(得分:0)
您对结果的期望是什么? '%'是SQL中的通配符,所以你基本上是这样说的:
1)"从表格中选择所有" 2)"从表中选择所有列,其中第1列实际上是任何"
这些实际上是相同的,因为第二个查询的后半部分根本没有细化条件。这有点像说:
1)"从字母表中选择全部" 2)"从字母表中选择所有条目,其中条目是字母"
它会产生相同的结果,因为你没有在声明中添加一个非常精细的条件。
答案 2 :(得分:0)
因为像%%这样的column1没有过滤数据集中的任何行 表。
简短%将匹配Column1中的任意数量的字符。
如果您想匹配%字符,则需要使用转义模式\%
https://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html