Как отличить конкретный столбец после объединения двух разных таблиц? - PullRequest
0 голосов
/ 10 января 2019

Я хочу объединить две разные таблицы и сделать их уникальными для конкретного столбца. Я использую базу данных postgresql.

q1 = self.dbsession.query(
            A.id.label('a_id'),
            null().label('b_id'),
            A.name.label('name'),
            A.email.label('email'),
            A.photo.label('photo'))

q2 = self.dbsession.query(
            B.matched_a_id.label('a_id'),
            B.id.label('b_id'),
            B.name.label('name'),
            B.email.label('email'),
            A.photo.label('photo'))

q1.union(q2).all()

Это вывод, который я получаю:

[(306, 80, 'StackOverFlow', 'stack@over.flow', 'www.picture.url'), (306, None, 'StackOverFlow', 'stack@over.flow', 'www.picture.url'), (305, None, 'Google', 'google@gmail.com', ''), (None, 82, 'Explorer', 'explorer@microsoft.com', '')

Как видите, первый и второй элемент практически дублированы. Я хотел бы различать все записи после объединения с первым столбцом, который помечен как a_id. Возможно ли это?

Ожидаемый вывод будет для меня тем же списком, но без элемента, у которого первый столбец идентичен первому, а второй - None, например: [(306, 80, 'StackOverFlow', 'stack@over.flow', 'www.picture.url'), (305, None, 'Google', 'google@gmail.com', ''), (None, 82, 'Explorer', 'explorer@microsoft.com', '')

1 Ответ

0 голосов
/ 11 января 2019

Рабочий раствор был на самом деле легким ..

users = self.dbsession.query(
        User.id.label('a_id'),
        null().label('b_id'),
        User.name.label('name'),
        User.email.label('email'),
        User.photo.label('photo'))

invitations = self.dbsession.query(
        ApplicationInvitation.matched_user_id.label('a_id'),
        ApplicationInvitation.id.label('b_id'),
        ApplicationInvitation.name.label('name'),
        ApplicationInvitation.email.label('email'),
        User.photo.label('photo')).\
    filter(ApplicationInvitation.matched_user_id.is(None)).\
    outerjoin(User, ApplicationInvitation.matched_user_id == User.id)

users.union(invitations).all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...