Автор Тема: Или я глючу или MySQl помогите разобраться  (Прочитано 2467 раз)

0 Пользователей и 1 Гость просматривают эту тему.

FoxMulder

  • Гость
Почему при таком запросе :
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 а при втором все ок!

Помогите плиз!

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Или я глючу или MySQl помогите разобраться
« Ответ #1 : 28 Августа 2002, 14:50:49 »
NULL при LEFT JOIN\'е может выводиться, когда в правой таблице нету соответствующих записей
На Машине Тьюринга далеко не уедешь.

FoxMulder

  • Гость
Или я глючу или MySQl помогите разобраться
« Ответ #2 : 28 Августа 2002, 14:54:29 »
так в том-то все и дело что соответствие есть!
только при join`е почему-то она его ненаходит а если как я указал во втором запросе явно имеется ввиду (d.idm=m.idm) то все впорядке! Почему же тогда так происходит? Может сам запрос не корректно построен?

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Или я глючу или MySQl помогите разобраться
« Ответ #3 : 28 Августа 2002, 14:57:28 »
это разные JOIN\'ы

то, что идет как table1,table2 where - это INNER JOIN
а в первом случае у тебя LEFT JOIN
На Машине Тьюринга далеко не уедешь.

FoxMulder

  • Гость
Или я глючу или MySQl помогите разобраться
« Ответ #4 : 28 Августа 2002, 15:03:50 »
Зы.. а вот если указать where l.idl=23150 то первый вариант показывает корректно т.е. 21 | 23150 | is101854 | 1 | infos_bv | default | Default  
почему же тогда без конкретного указания он мне выдает NULL? кстати у меня стоит MySQl ... мож все таки MySQl глючит а?

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Или я глючу или MySQl помогите разобраться
« Ответ #5 : 28 Августа 2002, 15:15:48 »
FoxMulder
я тебе ничего не могу сказать кто из вас глючит (да и другие тоже врядли смогут), т.к. я не знаю ни структуры твоих таблиц, ни данных, которые там лежат, ни версии твоего мускля и т.д ...
На Машине Тьюринга далеко не уедешь.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28