Задавайте вопросы, мы ответим
Вы не зашли.
SELECT * FROM (SELECT '1' as `type`) as `tbl1` LEFT JOIN `tbl2` ON `name`='2'
я хочу присоединить строчку из `tbl2` в которой `name`='2', и NULL, если ее нету.
Вроде именно то, что я хочу, но ВСЕГДА пишут что в ON должно быть только условие объединения, посему вопрос-это нормальное условие объединения таблиц или всегда подразумевается участие `tbl1`.``=`tbl2`.``
?
Неактивен
Ответ будет двояким
С одной стороны — можно использовать всё, что угодно, лишь бы оно решало
поставленную задачу. С этой точки зрения — ведь работает же? Значит, можно.
С другой стороны — как правило, если Вы используете в объединении конструк-
ции, не связывающие таблицы, — это как правило говорит о том, что Вы невер-
но для себя сформулировали задачу.
В данном конкретном случае Вы хотите узнать, есть ли строка с именем 2 во
второй таблице, и вернуть ее результаты, одновременно захватив константу.
Я предлагаю Вам переписать этот запрос в виде
SELECT *, 1 AS type FROM tbl2 WHERE name = 2,
а отсутствие строки обработать в приложении. Так Вы достигнете следующих
целей:
а) простой и понятный запрос, который не требует осмысления
б) простая и понятная логика приложения (которая проверяет, есть ли строка,
а не приехал ли NULL)
в) отсутствие сомнений по поводу того, хорошо ли живет LEFT JOIN со стран-
ным условием объединения
Неактивен
спасибо за подробный ответ.
Я просто с mysql именно плохо знаком. Знаю, что куча условностей и плохо работающих (на первый взгляд вполне нормальных) конструкций.
удобство для меня- в том, что я вместо двух запросов (SELECT '1' as `type`)-понятно, что это не статика и вообще это и тысяча записей ) имею один и без isset в коде(если это пхп).
сейчас посмотрел EXPLAIN-вроде статика. Но после удивления, как mysql относится к IN(SELECT ) я уже ничему не верю.
Неактивен