sqlite 为什么这个JOIN+AND查询与这个JOIN查询相同?

cu6pst1q  于 2023-03-23  发布在  SQLite
关注(0)|答案(2)|浏览(155)

我有一个SQLite数据库,其中包含一个事件表、一个参与者表和一个将每个参与者链接到他们参加的每个事件的第三个表。

only_joined_table = mydb.execute('SELECT * FROM event_participant_link LEFT JOIN event '
                                 'ON event_participant_link.event_id = event.event_id').fetchall()

joined_table = mydb.execute('SELECT * FROM event_participant_link LEFT JOIN event '
                            'ON event_participant_link.event_id = event.event_id '
                            'AND event_participant_link.participant_id = ?',
                            [participant_id]).fetchall()

print(len(only_joined_table), len(joined_table)) # Result: 7929 7929

这两个查询显然显示了相同数量的条目,这表明AND event_participant_link.participant_id = participant_id实际上没有做任何事情。这是不是在连接表上添加约束过滤器的正确方法?或者是否会弹出其他东西来解释意外的结果?

jvlzgdj9

jvlzgdj91#

LEFT JOIN,“绑定”为您提供event_participant_link中的所有行-如果7929恰好是表event_participant_link的count(*),我不会感到惊讶。您试图实现的,可能只是通过查询获得-
select distinct(event_id) from event_participant_link where participant_id = ?,[participant_id]`

zfycwa2u

zfycwa2u2#

这将确保查询只返回具有指定ID的参与者参加的事件

joined_table = mydb.execute('''
SELECT * FROM event_participant_link LEFT JOIN event 
ON event_participant_link.event_id = event.event_id 
WHERE event_participant_link.participant_id = {}'''.format(participant_id)).fetchall()

相关问题