Запрос с встречающимся пустыми полями

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 же это не проходит... Как быть?

Заранее спасибо за помощь.
 

Ashotovich

Новичок
Не знаю как, но это работает:

SELECT table1.field1_id, table2.field2_name FROM table1
LEFT JOIN table2 ON table1.field2_id=table2.field2_id


Проблема в том, что таблицы в базе собираются быть достаточно большими: в одной - полтора-два миллиона записей в год, штук пятнадцать полей, в другой - десятки тысяч записей, около десяти полей - не будет ли все сильно тормозить с джойнами?

Да, кстати, огромное спасибо за наводку.
 

tony2001

TeaM PHPClub
Ashotovich
(+) в Оракле - это извращенный и не<стандарт>ный вариант LEFT JOIN.
 

Ashotovich

Новичок
2 tony2001:
Хм. Если честно, с механизмом работы JOIN я не шибко знаком - надо почитать, пожалуй, спецлитературу...

2 Апельсин:
А как для JOIN индексы создавать? Или просто в каждой таблице поля по отдельности проиндексировать?
 

tony2001

TeaM PHPClub
>просто в каждой таблице поля по отдельности проиндексировать
да, те поля, которые в ON и WHERE используются.
 

Ashotovich

Новичок
Как говорится, голь на выдумки хитра.

Взял, да создал в table2 запись (это я все на упрощенном примере привожу, на самом деле query селекта у меня пять строк занимает в полную ширину экрана):

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

В table1 же при вводе информации если значение field2 не задано, присваиваю field2_id значение 0. И все селектится! :D

Хотя подход, конечно, ненаучный.
 
Сверху