mariadb选择外贴还是侧贴?

monwx1rj  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(104)

我想使用的是CROSS APPLY,但我猜mysql中不存在这种方法。我读过的替代方法是LATERAL。我使用的是mariadb 10.3,我猜也不存在这种方法。ticket表包含一个id,它被note表中的ticket_id列引用。一张ticket可以有很多notes,我试图列出所有的票据,并列出它们最近的票据日期(post_date)。我该如何编写下面的mariadb查询呢?

SELECT t.*, n.post_date
FROM ticket t,
LATERAL (
    SELECT note.post_date FROM note WHERE t.id = note.ticket_id ORDER BY note.post_date DESC LIMIT 1
) n;

表格结构示例:

    • 机票**

| 标识符|科目|
| - -| - -|
| 一个|填料|
| 2个|更多|

    • 注意事项**

| 标识符|晚于日期|票证标识|
| - -| - -| - -|
| 一个||一个|
| 2个||一个|
| 三个||2个|
| 四个||一个|
| 五个||2个|
我确实找到了一个开放的jira票从人们要求mariadb支持横向。

r8xiu3jd

r8xiu3jd1#

据我所知,MariaDB版本11之前不支持LATERAL。但我们可以在这里轻松使用ROW_NUMBER,它是受支持的:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ticket_id ORDER BY post_date DESC) rn
    FROM note
)

SELECT t.*, n.post_date
FROM ticket t
INNER JOIN cte n
    ON n.ticket_id = t.id
WHERE n.rn = 1;

如果要对当前横向连接进行精密平移,请使用:

SELECT t.*,
    (SELECT n.post_date
     FROM note n
     WHERE t.id = note.ticket_id
     ORDER BY n.post_date DESC
     LIMIT 1)
FROM ticket t;

相关问题