SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.11.2010 23:46:15

relax
Участник
Зарегистрирован: 01.11.2010
Сообщений: 19

LEFT JOIN ON

SELECT * FROM (SELECT '1' as `type`) as `tbl1`  LEFT  JOIN `tbl2` ON `name`='2'
я хочу присоединить строчку из `tbl2` в которой `name`='2', и NULL, если ее нету.

Вроде именно то, что я хочу, но ВСЕГДА пишут что в ON должно быть только условие объединения, посему вопрос-это нормальное условие объединения таблиц или всегда подразумевается участие `tbl1`.``=`tbl2`.``
?

Неактивен

 

#2 02.11.2010 00:08:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: LEFT JOIN ON

Ответ будет двояким smile

С одной стороны — можно использовать всё, что угодно, лишь бы оно решало
поставленную задачу. С этой точки зрения — ведь работает же? Значит, можно.

С другой стороны — как правило, если Вы используете в объединении конструк-
ции, не связывающие таблицы, — это как правило говорит о том, что Вы невер-
но для себя сформулировали задачу.

В данном конкретном случае Вы хотите узнать, есть ли строка с именем 2 во
второй таблице, и вернуть ее результаты, одновременно захватив константу.
Я предлагаю Вам переписать этот запрос в виде
  SELECT *, 1 AS type FROM tbl2 WHERE name = 2,
а отсутствие строки обработать в приложении. Так Вы достигнете следующих
целей:
  а) простой и понятный запрос, который не требует осмысления
  б) простая и понятная логика приложения (которая проверяет, есть ли строка,
а не приехал ли NULL)
  в) отсутствие сомнений по поводу того, хорошо ли живет LEFT JOIN со стран-
ным условием объединения wink

Неактивен

 

#3 02.11.2010 13:38:54

relax
Участник
Зарегистрирован: 01.11.2010
Сообщений: 19

Re: LEFT JOIN ON

спасибо за подробный ответ.
Я просто с mysql именно плохо знаком. Знаю, что куча условностей и плохо работающих (на первый взгляд вполне нормальных) конструкций.

удобство для меня- в том, что я вместо двух запросов (SELECT '1' as `type`)-понятно, что это не статика и вообще это и тысяча записей smile)  имею один и без isset в коде(если это пхп).
сейчас посмотрел EXPLAIN-вроде статика. Но после удивления, как mysql относится к IN(SELECT )  я уже ничему не верю.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson