如何使用连接和多个where语句查询2个SqlLite表

问题描述 投票:0回答:1

我正在尝试编写一个返回一行的 SQLite 查询,它将执行以下语句:

选择所有消息,其中Action.action为receive,Action.name为john。另外,如果 message_id 不为空,则将 Action.name 显示为 sender_name,其中 message_id 相同

输出结果

留言 名字 发件人姓名
世界你好! 约翰 戴夫
匿名留言 约翰
<null>

行动表

id 消息_id 行动 名字
1 1 发送 戴夫
2 1 收到 约翰
3
<null> 
发送 戴夫
4 2 收到 约翰

留言表

id 留言
1 世界你好!
2 匿名留言

我也在使用 Sqlalchemy,所以如果有更简单的方法来实现这一点,请告诉我。

有人可以阐明如何实现这一目标吗?

sqlite
1个回答
0
投票

您应该在“action”表上执行左连接,将主选择(接收)与连接(发送,因为后者可以为空)分开。然后,只需添加查询的其余条件即可。

SELECT message.message, receive.name, send.name FROM action receive 
LEFT JOIN action send ON send.action = 'send' AND send.message_id = receive.message_id 
JOIN message ON message.id = receive.message_id
WHERE receive.action = 'receive' AND receive.name = 'john';

结果:

message         name    name
-------------------------------

Hello World!    john    dave
Annon Message   john    <null>
© www.soinside.com 2019 - 2024. All rights reserved.