Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: JOINы
 
 автор: а-я   (21.08.2008 в 18:50)   письмо автору
 
 

Есть запрос

SELECT `tbl_1`.*, `tbl_2`.* FROM `tbl_1`, `tbl_2` WHERE `tbl_1`.`id` = $id AND `tbl_1`.`id` = `tbl_2`.`id`


Как можно сделать такой же запрос с помощью JOIN?
Т.е. чтоб записи были и в 1ой и 2ой таблице!

И какие еще бывают JOINы?
И в каких случаях их применяют.

  Ответить  
 
 автор: BinLaden   (21.08.2008 в 19:04)   письмо автору
 
   для: а-я   (21.08.2008 в 18:50)
 

SELECT `t1`.*, `t2`.* FROM `tbl_1` AS `t1` JOIN `tbl_2` AS `t2` ON `t1`.`id` = `t2`.`id`;

  Ответить  
 
 автор: GeorgeIV   (21.08.2008 в 22:56)   письмо автору
 
   для: а-я   (21.08.2008 в 18:50)
 

Джойны бываю левые, правые и полные. По умолчанию - левый джойн. Это когда объединяются все подходящие данные из первой таблицы и подходящие по связующему полю из правой таблицы, для тех строк из первой таблицы, которым нет соответствующих данных во второй, в результирующей таблице пишется NULL.
Правый JOIN с точностью до наоборот.
Полный JOIN полностью сливает две таблицы, дополняя записи, где нет соответствия NULL -ом.
Пример простейший:
Table 1                  Table2
name data      name name2
aaaa  123      aaaa   aaa1 
aaaa  333       bbb     4444
bbb    345       eee    5555
ddd   456

Объединения по полю name дадут такие таблицы
LEFT                              RIGHT                               FULL
name data name2     name   name2  data       name   data  name2
aaaa  123   aaa1        aaaa    aaa1     123          aaaa   123   aaa1
aaaa   333  aaa1        aaaa    aaa1     333          aaaa    333  aaa1
bbb    345   4444        eee      5555     NULL       bbb      345   4444
ddd   456    NULL                                                   ddd       456  NULL
                                                                                   eee      NULL 5555

Теоретически так.
PS Разъезжается . А как столбики на форуме выравнивать?

  Ответить  
 
 автор: Trianon   (21.08.2008 в 23:45)   письмо автору
 
   для: GeorgeIV   (21.08.2008 в 22:56)
 

Джойны бывают внутренние и внешние. Внешние - это левые или правые. Собственно, бывают и полные, только не в MySQL (как минимум до последнего времени.)
Так вот, по умолчанию джойн как раз внутренний. И запятая, кстати - его семантический эквивалент.

  Ответить  
 
 автор: GeorgeIV   (22.08.2008 в 11:31)   письмо автору
 
   для: Trianon   (21.08.2008 в 23:45)
 

Смотрю стандарт MySQL - поддерживаются LEFT, RIGHT и FULL.(по крайней мере с версии 4.0)

  Ответить  
 
 автор: Trianon   (22.08.2008 в 11:37)   письмо автору
 
   для: GeorgeIV   (22.08.2008 в 11:31)
 

В стандарт, говорите?
Я смотрю сюда: http://dev.mysql.com/doc/refman/5.0/en/join.html
В спецификации его нет.
В пользовательских комментариях - куча матюков и примеров костылей для выхода из ситуации.

Куда смотрите Вы?

И кстати, основное возражение было против слов "по умолчанию левый джойн". Этого ни в каких диалектах языка нет.
А FULL - так, мелочи.

  Ответить  
 
 автор: GeorgeIV   (22.08.2008 в 11:43)   письмо автору
 
   для: Trianon   (22.08.2008 в 11:37)
 

Печатный SQL-справочник

  Ответить  
 
 автор: Trianon   (22.08.2008 в 11:44)   письмо автору
 
   для: GeorgeIV   (22.08.2008 в 11:43)
 

SQL или MySQL ?

В SQL вообще FULL OUTER JOIN конечно есть. Посто в MySQL он не реализован.

  Ответить  
 
 автор: GeorgeIV   (22.08.2008 в 11:47)   письмо автору
 
   для: Trianon   (22.08.2008 в 11:44)
 

SQL, там перечислены практически все основные СУБД - ORACLE, MySQL, MS SQL ... и рассматриваются особенности и отклонения от стандарта у каждой СУБД

PS но наверно, разработчикам следует более доверять, поэтому будем считать что в книге опечатка

  Ответить  
 
 автор: Trianon   (22.08.2008 в 11:49)   письмо автору
 
   для: GeorgeIV   (22.08.2008 в 11:47)
 

Тем не менее, если в нем и вправду написано "по умолчанию - левый" - его стоит выкинуть.

  Ответить  
 
 автор: GeorgeIV   (22.08.2008 в 11:58)   письмо автору
 
   для: Trianon   (22.08.2008 в 11:49)
 

нет, там написано INNER, это я уже по памяти написал - левый. Тут я неправ, однозначно :-(

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования