powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с встречающимся пустыми полями
6 сообщений из 6, страница 1 из 1
Запрос с встречающимся пустыми полями
    #32336392
Ashotovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток.
Возник у меня следующий вопрос: как в MySQL сделать селект следующего вида (простой пример):
SELECT table1.field1_id, table2.field2_name FROM table1, table2 WHERE table1.field2_id=table2.field2_id
из таблиц table1 (CREATE TABLE `table1` (`field1_id` TINYINT (3) UNSIGNED DEFAULT '0', `field2_id` TINYINT (3) UNSIGNED DEFAULT '0')) и table2 (CREATE TABLE `table2` (`field2_id` TINYINT (3) UNSIGNED DEFAULT '0', `field2_name` VARCHAR (3) DEFAULT '0')), если table1.field2_id и, соответственно, относящийся к нему table2.field2_name периодически не заполены? Если оставить запрос как есть - см. выше, то селект выдает только те строки, которые соответствуют значению table1.field2_id, не равному NULL. Строки же с пустым значением не выдает.
В Оракле это решалось просто - к названию полей в селекте, могущих иметь значение NULL просто ставился значок (+). В MySQL же это не проходит... Как быть?

Заранее спасибо за помощь.
...
Рейтинг: 0 / 0
Запрос с встречающимся пустыми полями
    #32336672
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WHERE table1.field2_id=table2.field2_id OR table1.field2_id IS NULL
...
Рейтинг: 0 / 0
Запрос с встречающимся пустыми полями
    #32336768
Ashotovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неа. Такое не работает. То есть при таком раскладе:

CREATE TABLE `table1` (`field1_id` TINYINT (3) UNSIGNED DEFAULT '0', `field2_id` TINYINT (3) UNSIGNED DEFAULT '0')
INSERT INTO table1 (field1_id, field2_id) VALUES (1, 1)
INSERT INTO table1 (field1_id, field2_id) VALUES (2, 2)
INSERT INTO table1 (field1_id, field2_id) VALUES (3, 3)
INSERT INTO table1 (field1_id, field2_id) VALUES (4, 4)

CREATE TABLE `table2` (`field2_id` TINYINT (3) UNSIGNED DEFAULT '0', `field2_name` VARCHAR (3) DEFAULT '0')
INSERT INTO table2 (field2_id, field2_name) VALUES (1, 'aaa')
INSERT INTO table2 (field2_id, field2_name) VALUES (2, 'bbb')
INSERT INTO table2 (field2_id, field2_name) VALUES (3, '')
INSERT INTO table2 (field2_id, field2_name) VALUES (4, 'ddd')

и выводе данных таким селектом MySQL выдает вот такое вот ...:


+-----------+-------------+
| field1_id | field2_name |
+-----------+-------------+
| 1 | aaa |
| 3 | aaa |
| 2 | bbb |
| 3 | bbb |
| 3 | |
| 3 | ddd |
| 4 | ddd |
| 3 | |
+-----------+-------------+
...
Рейтинг: 0 / 0
Запрос с встречающимся пустыми полями
    #32336770
Ashotovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И как здесь люди красивые таблички приводят?
...
Рейтинг: 0 / 0
Запрос с встречающимся пустыми полями
    #32336820
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вам лучше пользоваться left join
Код: plaintext
1.
 SELECT table1.field1_id, table2.field2_name FROM table1 left join  table2 using (field2_id);


Кроме того, должен заметить, что в mysql пустая строка это не NULL. А именно пустая строка.
...
Рейтинг: 0 / 0
Запрос с встречающимся пустыми полями
    #32336888
Ashotovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор писал:Кроме того, должен заметить, что в mysql пустая строка это не NULL. А именно пустая строка.

Хм... ХитрО. В Оракле, вроде, пустая строка - как раз NULL. А значение "0" - уже, занчит, не NULL. Разве в MySQL не так?

Да, насчет JOIN. Метод хороший и вполне работающий. Вот только, боюсь, что с моими таблицами на миллионы записей это будет люто тормозить... Даже с индексами. Так что я принял довольно-таки тупое, но действенное решение:

INSERT INTO table2 (field2_id, field2_name) VALUES (0, '')

В table1 же при вводе информации если значение field2 не задано, присваиваю field2_id значение 0. И все селектится! ;) Весьма неуниверсальное решение, но мне помогло.

Да, кстати, если я неправ насчет скорости JOIN больших таблиц, то готов съесть свою шляпу.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с встречающимся пустыми полями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]