MySQL возвращает плохой результат - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть вопрос об операторе SELECT FROM WHERE, который возвращает мне неверный результат.

Вот моя таблица с именем friends:

+----------+-----------+------------+--------+--------+-------+
| 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'

????

Спасибо!

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Подскажите, пожалуйста, почему?

Если вы добавите запись с регионом Z и отсортируете эти строки в алфавитном порядке по регионам, ожидаете ли вы, что ZL придетдо или после Z?Очевидно, это придет позже, поэтому не соответствует вашим критериям.

Если вы хотите рассмотреть только первый символ, то добавьте это к своим критериям :

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

Я бы также сделал Z явно прописной буквой вcase Ваши настройки базы данных делают поиск регистрозависимым.

0 голосов
/ 26 ноября 2018

Вы пробовали SELECT * FROM friends WHERE region <= 'zl';?

С точки зрения компьютера, 'z' < 'zl'

0 голосов
/ 26 ноября 2018

Потому что «ZL» больше, чем «Z».Z - это всего лишь один символ, поэтому он будет возвращать только значения, меньшие Z или значения Z. Что вы пытаетесь достичь с помощью этого запроса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...