我正在尝试编写一个返回一行的 SQLite 查询,它将执行以下语句:
选择所有消息,其中Action.action为receive,Action.name为john。另外,如果 message_id 不为空,则将 Action.name 显示为 sender_name,其中 message_id 相同
输出结果
留言 | 名字 | 发件人姓名 |
---|---|---|
世界你好! | 约翰 | 戴夫 |
匿名留言 | 约翰 |
|
行动表
id | 消息_id | 行动 | 名字 |
---|---|---|---|
1 | 1 | 发送 | 戴夫 |
2 | 1 | 收到 | 约翰 |
3 |
|
发送 | 戴夫 |
4 | 2 | 收到 | 约翰 |
留言表
id | 留言 |
---|---|
1 | 世界你好! |
2 | 匿名留言 |
我也在使用 Sqlalchemy,所以如果有更简单的方法来实现这一点,请告诉我。
有人可以阐明如何实现这一目标吗?
您应该在“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>