слева?
NULL слева должны быть
тогда right join
Не надо использовать картинки для иллюстрации JOIN-ов: https://blog.jooq.org/say-no-to-venn-diagrams-when-explaining-joins/
что-то не получается, нужен хелп
если я указываю where - не работает. как с этим быть?
Не указывать where
SELECT ... CASE WHEN field is NULL THEN 0 ELSE field END ... FROM ...
ахеренный совет 👍🏻 - доктор, мне больно дышать - ну, не дышите
https://pastebin.com/wsfeqyJh очень страшно получилось? верю, что можно лучше @Dhakfuabfk
Правильно сказали там null а вы where
что правильно? у меня вполне конкретная задача. предлагаете её не решать?
Давай уточним что ты хочешь сделать. Тебе нужно вывести тех, кого нет в trans или же вывести всех с нулями, но того кого ты хочешь вывести с 1?
Ну, наймите инжэнера тогда, раз конкретная задача.
мне нужно выбирать транзакции вендоров за where, если транзакций нет - всё равно должен быть vendor с 0
вы правда считаете, что эта задача стоит найма? вы не понимаете для чего предназначено сообщество и как в нём происходит обмен опытом. в конце концов я её уже решил сам. мне просто нужна критика и рекомендации
Ну, решыл и хорошо. Не решыл бы — тогда стоила бы, конечно.
Я вам выше написал про CASE- это именно ваш случай, посмотрите, пожалуйста, документацию: https://postgrespro.ru/docs/postgresql/13/functions-conditional
предлагаю подумать, чтобы понять. сначала надо без where и посмотреть. вывести столбцы по которым делаете where и подумать
не совсем понял мой кейс с CASE 😄
если кратко, мне нужно из таблицы с операциями выбирать where последние 5 минут, считать их количество и джойнить имя вендора из справочника. если операций нет, нужно всё равно джойнить всех вендоров и явно указывать, что count(trans) = 0. я решил это сам, через join + union с подзапросом без результата из join. всем спасибо, кто хоть чем-то помогал
ну и неверно решили, а надо было просто подумать
если есть что предложить лучше - внимательно вас слушаю
я предложил же ж. сделать right join без where для начала
ну как без where то? условие задачи where 5 минут 🤦🏻♂️ там база огромная транзакционная, зачем её всю переджойнивать?
вы понимаете в чем разница будет если фильтр писать в where или в on после join? могу еще подсказать используйте with для теста, там напишите свой where а потом к результату уже джойн пишите
ну вот чтобы лучше понять, надо пример разобрать. выберите таблицу поменьше и потренируйтесь. не надо на огромной делать конечно
ну я вот тут 👆🏻тестовую сделал. ок, посмотрим
Почему сразу неверно? Логически — это оно и есть. По сути, outer join — это синтаксический сахар для какой-то такой теоретико-множэственной операцыи. А что там сколько-то оптимизацый можэт незайти по сравнению с выделенной для этого конструкцыей — это часто неважно. К тому жэ, это скорее претэнзия к оптимизатору.
нет. это говнокод неоптимизированный. несколько раз обращаться к одним и тем же таблицам, когда можно один раз
Да в on запихнуть. Для inner join — вообще неважно, в where предикат какой-то или в on. А для outer — вот так, разница для присоединяемой с пропусками таблицы небольшая, но важная.
зря подсказали, лучше бы он сам это понял. я итак почти все разжевал
Обсуждают сегодня