*
from t1
left join t2 on t2.fieldT1_id = t1.id
Соотстветственно, могут возникнуть ситуации, когда в t1 есть строки, но они не имеют связи со строками из 2-ой таблицы.
Тогда я получу null.
Вопрос: можно ли как-то в блоке left join указать условие, что если не выполняется условие t2.fieldT1_id = t1.id, то брать строку с t2.id=1.... Типа как default?
Я бы внешним запросом для начала сделал. То есть внутренний — как был, и вокруг него всякий там ещё один left join t2_2 с условием t2.id is null and t2_2.id=1 или там coalesce у него на каждое поле в select-field в t2.
Да, вообще, я сделал с использованием coalesce. Но мне не нравиться в этом то, что я как-бы в коде хардкожу что-то, что лежит в таблице и по-идее, нужно брать из таблицы. Ибо, например, если в таблице поменяют значение, то придется его еще менять и в том/тех участке кода, где я это поменял. Еще я попробовал этот вопрос решить так: select * from t1 left join t2 on t2.fieldT1_id = t1.id or t2.id=3 В данном случае t2.id=3 - это id элемента, который должен отображаться по умолчанию. Но тут получается, что в коде опять таки придется делать хард-код. Но хотябы я указываю не конкретное значение других полей,а id. Это дает возможность менять значения других полей в t2, при этом на уровне кода ничего менять не потребуется. Если у кого-то есть более кошерные варианты решения вопроса, буду рад узнать!
Во втором-то случае всегда добавится строка с этим id.
Обсуждают сегодня