Forum Webscript.Ru

Общие => Базы данных => Тема начата: FoxMulder от 28 Августа 2002, 14:40:17

Название: Или я глючу или MySQl помогите разобраться
Отправлено: FoxMulder от 28 Августа 2002, 14:40:17
Почему при таком запросе :
ysql> select l.idd, l.idl, l.login, d.idm, d.name, m.name, m.fio FROM iplc left join l on (iplc.idl=l.idl) left join d on (d.idd=l.i
dd) left join m on (d.idm=m.idm) WHERE iplc.firstusage BETWEEN 1025467200 AND 1025553599  LIMIT 2;
+------+-------+----------+------+----------+------+------+
| idd  | idl   | login    | idm  | name     | name | fio  |
+------+-------+----------+------+----------+------+------+
|    0 | 12355 | is300162 | NULL | NULL     | NULL | NULL |
|   21 | 23150 | is101854 |    1 | infos_bv | NULL | NULL |
+------+-------+----------+------+----------+------+------+

поля name и fio NULL ?

а при таком все ок как и должно быть? Разве нельзя соединять таблицы несколько раз или это глюк?

select l.idd, l.idl, l.login, d.idm, d.name, m.name, m.fio FROM iplc left join l on (iplc.idl=l.idl) left join d on (d.idd=l.i
dd),m  WHERE iplc.firstusage BETWEEN 1025467200 AND 1025553599 AND d.idm=m.idm  LIMIT 2;
+------+-------+----------+------+----------+---------+---------+
| idd  | idl   | login    | idm  | name     | name    | fio     |
+------+-------+----------+------+----------+---------+---------+
|    0 | 12355 | is300162 | NULL | NULL     | default | Default |
|   21 | 23150 | is101854 |    1 | infos_bv | default | Default |
+------+-------+----------+------+----------+---------+---------+


Т.е. в таблице m при m.idm=1 m.fio=\'Default\'

При первом запросе почему-то NULL а при втором все ок!

Помогите плиз!
Название: Или я глючу или MySQl помогите разобраться
Отправлено: fidget от 28 Августа 2002, 14:50:49
NULL при LEFT JOIN\'е может выводиться, когда в правой таблице нету соответствующих записей
Название: Или я глючу или MySQl помогите разобраться
Отправлено: FoxMulder от 28 Августа 2002, 14:54:29
так в том-то все и дело что соответствие есть!
только при join`е почему-то она его ненаходит а если как я указал во втором запросе явно имеется ввиду (d.idm=m.idm) то все впорядке! Почему же тогда так происходит? Может сам запрос не корректно построен?
Название: Или я глючу или MySQl помогите разобраться
Отправлено: fidget от 28 Августа 2002, 14:57:28
это разные JOIN\'ы

то, что идет как table1,table2 where - это INNER JOIN
а в первом случае у тебя LEFT JOIN
Название: Или я глючу или MySQl помогите разобраться
Отправлено: FoxMulder от 28 Августа 2002, 15:03:50
Зы.. а вот если указать where l.idl=23150 то первый вариант показывает корректно т.е. 21 | 23150 | is101854 | 1 | infos_bv | default | Default  
почему же тогда без конкретного указания он мне выдает NULL? кстати у меня стоит MySQl ... мож все таки MySQl глючит а?
Название: Или я глючу или MySQl помогите разобраться
Отправлено: fidget от 28 Августа 2002, 15:15:48
FoxMulder
я тебе ничего не могу сказать кто из вас глючит (да и другие тоже врядли смогут), т.к. я не знаю ни структуры твоих таблиц, ни данных, которые там лежат, ни версии твоего мускля и т.д ...