gpt4 book ai didi

MySQL – 左连接右表中的最后一条记录

转载 作者:行者123 更新时间:2023-11-29 09:29:11 25 4
gpt4 key购买 nike

我需要使用 LEFT JOIN 进行查询,在其中可以找到表 2 的最后一条记录。为此,我在表 2 的“列”中查找表 1 的“Id channel ”。

我当前的查询必须为此进行扩展。我尝试了多种方法,但没有成功。我希望你能帮助我。

https://murrayhopkins.wordpress.com/2008/10/28/mysql-left-join-on-last-or-first-record-in-the-right-table/

表1

id  id1  id2 g_id1  g_id2   datum
1 1 2 x x timestamp
2 3 1 x x timestamp
3 3 2 x x timestamp

表2

n_id    channel absender     nachricht            datum
1 1 2 messagetext1 2019-09-22 19:30:31
2 1 1 messagetext2 2019-09-22 19:35:31
3 2 1 messagetext3 2019-09-22 19:40:31
3 2 3 messagetext4 2019-09-22 19:42:31
4 3 2 messagetext5 2019-09-22 20:40:31

表3

id    firmenname  
1 companyname1
2 companyname2
3 companyname3

输出

id  id1  id2 g_id1  g_id2   datum      firmenname     firmenname2   nachricht
1 1 2 x x timestamp companyname1 companyname2 messagetext2
2 2 1 x x timestamp companyname2 companyname1 messagetext4
3 3 2 x x timestamp companyname3 companyname2 messagetext5

我当前的查询

SELECT a.*, b.firmenname as firmenname1, c.firmenname as firmenname2 FROM nachrichtensystem a LEFT JOIN spieler b ON a.id1 = b.id LEFT JOIN spieler c ON a.id2 = c.id WHERE id1 = $sp_id OR id2 = $sp_id ORDER BY a.timestamp DESC LIMIT $id, 8

声明表1 id是ChannelId。我需要孔表 1 和表 2 中该 channel 的最后一条消息。这与表 3 中的 LIMIT 和公司名称(公司名称)有关。在我当前的查询中,仅缺少表 2 中最后一条消息的部分。公司名称1 和 2 来自表 3 这是我需要的

ORDER BY timestamp DESC LIMIT $id, 8

最佳答案

您需要一个子查询来返回每个 channel 的最后一条消息并连接到 table1,然后连接 table3 两次:

select t1.*, t31.firmenname, t32.firmenname firmenname2, t2.nachricht 
from table1 t1
left join (
select t.* from table2 t
where not exists (
select 1 from table2
where channel = t.channel and datum > t.datum
)
) t2 on t2.channel = t1.id
left join table3 t31 on t31.id = t1.id1
left join table3 t32 on t32.id = t1.id2
order by t1.id

请参阅demo .
结果:

| id  | id1 | id2 | g_id1 | g_id2 | datum     | firmenname   | firmenname2  | nachricht    |
| --- | --- | --- | ----- | ----- | --------- | ------------ | ------------ | ------------ |
| 1 | 1 | 2 | x | x | timestamp | companyname1 | companyname2 | messagetext2 |
| 2 | 3 | 1 | x | x | timestamp | companyname3 | companyname1 | messagetext4 |
| 3 | 3 | 2 | x | x | timestamp | companyname3 | companyname2 | messagetext5 |

关于MySQL – 左连接右表中的最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59063452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com