我有一个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
实际上没有做任何事情。这是不是在连接表上添加约束过滤器的正确方法?或者是否会弹出其他东西来解释意外的结果?
2条答案
按热度按时间jvlzgdj91#
LEFT JOIN,“绑定”为您提供
event_participant_link
中的所有行-如果7929恰好是表event_participant_link
的count(*),我不会感到惊讶。您试图实现的,可能只是通过查询获得-select distinct(event_id) from event_participant_link where participant_id = ?
,[participant_id]`zfycwa2u2#
这将确保查询只返回具有指定ID的参与者参加的事件