1 回答
TA贡献1895条经验 获得超3个赞
WHERE xx将匹配计算结果为真值的任何行。由于BOOLEAN实际上是数字类型TINYINT(1),因此它的工作原理是转换为数字,然后与零进行比较 - 任何非零数字都是真实的。(NULL是假的。)
如果你写,那么仅对于isWHERE id = 123的行,表达式将计算为(与 相同)并且它会匹配,否则它将计算为()。id123id = 123TRUE1FALSE0
但如果你写WHERE id,则要求id计算结果为真值。如果id是一个数字,则只有 ID 0,NULL将是假的。
但是,在 的情况下description,您有一个字符串。并且字符串首先被转换为数字。您获得许多结果的原因是任何以数字(非零)开头的字符串都是匹配的,例如01234hello(转换为非零的 1234)。检查CONVERT(description, SIGNED)给出的内容 - 如果它非零,则它匹配。
这就是为什么在代码中构建AND或OR查询时,您可以通过以TRUEor 1(在这种AND情况下)或FALSEor 0(在这种OR情况下)开头来避免专门处理零条件的情况,因为WHERE TRUE/WHERE 1是有效的(匹配所有内容),就像WHERE FALSE/ WHERE 0(不匹配任何内容)。WHERE 1因此,您可以通过以下方式开始并添加以下内容来构建查询: WHERE 1、WHERE 1 AND id = 123、WHERE 1 AND id = 123 AND type = 'xy'等。
- 1 回答
- 0 关注
- 180 浏览
添加回答
举报
