|
Запрос с встречающимся пустыми полями
|
|||
---|---|---|---|
#18+
Всем доброго времени суток. Возник у меня следующий вопрос: как в 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 же это не проходит... Как быть? Заранее спасибо за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2003, 11:06 |
|
Запрос с встречающимся пустыми полями
|
|||
---|---|---|---|
#18+
WHERE table1.field2_id=table2.field2_id OR table1.field2_id IS NULL ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2003, 13:32 |
|
Запрос с встречающимся пустыми полями
|
|||
---|---|---|---|
#18+
Неа. Такое не работает. То есть при таком раскладе: 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 | | +-----------+-------------+ ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2003, 14:33 |
|
Запрос с встречающимся пустыми полями
|
|||
---|---|---|---|
#18+
И как здесь люди красивые таблички приводят? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2003, 14:33 |
|
Запрос с встречающимся пустыми полями
|
|||
---|---|---|---|
#18+
вам лучше пользоваться left join Код: plaintext 1.
Кроме того, должен заметить, что в mysql пустая строка это не NULL. А именно пустая строка. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2003, 14:57 |
|
Запрос с встречающимся пустыми полями
|
|||
---|---|---|---|
#18+
автор писал:Кроме того, должен заметить, что в mysql пустая строка это не NULL. А именно пустая строка. Хм... ХитрО. В Оракле, вроде, пустая строка - как раз NULL. А значение "0" - уже, занчит, не NULL. Разве в MySQL не так? Да, насчет JOIN. Метод хороший и вполне работающий. Вот только, боюсь, что с моими таблицами на миллионы записей это будет люто тормозить... Даже с индексами. Так что я принял довольно-таки тупое, но действенное решение: INSERT INTO table2 (field2_id, field2_name) VALUES (0, '') В table1 же при вводе информации если значение field2 не задано, присваиваю field2_id значение 0. И все селектится! ;) Весьма неуниверсальное решение, но мне помогло. Да, кстати, если я неправ насчет скорости JOIN больших таблиц, то готов съесть свою шляпу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2003, 15:28 |
|
|
start [/forum/topic.php?fid=47&gotonew=1&tid=1855606]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 169ms |
0 / 0 |