mysql返回错误结果

f87krz0w  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(150)

我有一个关于select from where语句的问题,它返回了一个坏结果。
这是我的朋友桌:

+----------+-----------+------------+--------+--------+-------+
| lastname | firstname | callprefix | phone  | region | zip   |
+----------+-----------+------------+--------+--------+-------+
| Lužný    | Bob       |        602 | 111222 | OL     | 79821 |
| Matyáš   | Bob       |        773 | 123456 | BR     | NULL  |
| Strouhal | Fido      |        300 | 343434 | ZL     | 76701 |
| Přikryl  | Tom       |        581 | 010101 | PL     | 72000 |
| Černý    | Franta    |        777 | 000999 | OL     | 79801 |
| Zavadil  | Olda      |        911 | 111311 | OL     | 79604 |
| Berka    | Standa    |        604 | 111234 | ZL     | 72801 |
| Vlcik    | BbB       |        736 | 555444 | KV     | 35210 |
+----------+-----------+------------+--------+--------+-------+

这是我的问题。

SELECT * FROM friends WHERE region <= 'z';

我希望区域为zl的行应该存在,但它们不存在。你能告诉我为什么吗?
结果是:

+----------+-----------+------------+--------+--------+-------+
| lastname | firstname | callprefix | phone  | region | zip   |
+----------+-----------+------------+--------+--------+-------+
| Lužný    | Bob       |        602 | 111222 | OL     | 79821 |
| Matyáš   | Bob       |        773 | 123456 | BR     | NULL  |
| Přikryl  | Tom       |        581 | 010101 | PL     | 72000 |
| Černý    | Franta    |        777 | 000999 | OL     | 79801 |
| Zavadil  | Olda      |        911 | 111311 | OL     | 79604 |
| Vlcik    | BbB       |        736 | 555444 | KV     | 35210 |
+----------+-----------+------------+--------+--------+-------+

当我尝试此查询时:

SELECT * FROM friends WHERE region >= 'z';

结果包含region='zl'的两行
????
谢谢您!

pengsaosao

pengsaosao1#

因为“zl”大于“z”。z只是一个字符,所以只返回小于z或具有z值的值。你想用这个查询实现什么?

7tofc5zh

7tofc5zh2#

你试过了吗 SELECT * FROM friends WHERE region <= 'zl'; ?
从计算机的Angular 来看, 'z' < 'zl'

roqulrg3

roqulrg33#

你能告诉我为什么吗?
如果添加一个记录 Z ,并按区域按字母顺序排列这些行,您希望 ZL 在…之前或之后 Z ? 很明显它会在后面出现,所以它不符合你的标准。
如果只考虑第一个字符,请将其添加到条件中:

SELECT * FROM friends WHERE LEFT(region,1) <= 'Z';

我也会 Z 显式使用大写字母,以防数据库设置使其成为区分大小写的搜索。

相关问题