[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Если поле не NULL, то JOIN с условием, если NULL -
Myrow
Здравствуйте. Имеем две таблицы, tbl1 и tbl2. Джойним одну к другой:
SELECT * FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id

В tbl1 и tbl2 также есть колонка city_id. Нужно как-то прописать условие, чтобы если tbl1.city_id не NULL - то в выражении WHERE (или в выражении ON в JOIN) было условие WHERE tbl2.city_id = tbl1.city_id, а если tbl1.city_id является NULL, то такого условия не было. Можно это реализовать? Пробовал IF и CASE и прописывал их в WHERE, но то ли не так приписывал, то ли... В общем прошу помощи.
rooor
INNER JOIN
Myrow
А при чем тут тип JOIN'а?
sergeiss
Я не совсем понял, что ты хочешь. Но в любом случае в WHERE можно прописать много разных условий. Объединяй нужные части скобками, если это требуется. Пиши AND и OR. Короче говоря, строй то условие, что ты хочешь получить.

Ну вот некий абстрактный пример
WHERE COND1 AND (COND2 OR COND3) AND (COND4 OR COND5 OR COND6)


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Myrow
Блин, как все просто оказалось. А я конструкции воротил.
SELECT * FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id
WHERE (tbl1.city_id IS NULL) OR (tbl1.city_id IS NOT NULL AND tbl2.city_id = tbl1.city_id)
sergeiss
Интересно бы глянуть, что можно было тут наворотить smile.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
T1grOK
Цитата (Myrow @ 19.06.2013 - 10:42)
Блин, как все просто оказалось. А я конструкции воротил.
SELECT * FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id
WHERE (tbl1.city_id IS NULL) OR (tbl1.city_id IS NOT NULL AND tbl2.city_id = tbl1.city_id)

Раз уж мы проверили на NULL слева, то незачем проверять обратное справа.
То есть достаточно написать
SELECT * FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id
WHERE tbl1.city_id IS NULL OR tbl2.city_id = tbl1.city_id


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.