зачем rigt_join?
Наверное ты прав. Тебе же нужно чтобы выбрались аниме, которым не нашлось соответствующей записи из таблицы с каналами? то есть условно, при присоединении аниме к каналам, в строке получившейся таблицы, где канал не указан, должны быть NULL ? Мне кажется, у тебя и должно быть такое условие, что выбрать строки, где айди канала будет None (питоновскими словами)
1. да и даже с таким условием не работает, насколько я понял я должен сделать так (await session.execute(select(Anime).join(ChannelsToViewsAnime).filter( Anime.identifier != ChannelsToViewsAnime.anime_id, ChannelsToViewsAnime.anime_id == None ))).scalars().all() ?
если нижний мой ответ правильный, то оно не работает, вообще строк не выводит
что делает первое условие в filter?
не даёт выбрать Аниме с id таким которое уже есть в таблице ChannelsToViewsAnime
это как будто бы избыточно? вторым условием же ищем как раз только те, где канал не указан попробуй вообще убрать оба условия и покажи получившуюся таблицу
немного отредачил, я случайно join прописал, поставил outerjoib
ну хоть файлом кинь
берёт ещё повторы из этой таблицы async def test(self): async with self.session as session: unique_last_channel = (await session.execute(select(Anime).outerjoin(ChannelsToViewsAnime))).scalars().all() print(len(unique_last_channel)) for i in unique_last_channel: print(i.name)
я имел ввиду сделай запрос на сыром sql в своем клиенте с простым left join аниме и каналов
а в этом будет проблемка, я уже и забыл как SELECT * FROM anime LEFT_JOIN channels_to_views_anime ?
пример из доки постгреса: SELECT * FROM weather LEFT OUTER JOIN cities ON weather.city = cities.name;
Обсуждают сегодня