perl - JOIN 中的附加条件

标签 perl postgresql catalyst dbix-class

我有包含文章和用户的表,它们都有到第三个表的多对多映射 - 读取。

我在这里要做的是获取特定用户的所有未读文章(user_id 不在表 reads 中)。 我的查询是获取所有文章,但已阅读的文章已标记,如果可以的话,我可以过滤掉它们(user_id 字段包含相关用户的 ID)。

我有一个这样的 SQL 查询:

SELECT articles.id, reads.user_id 
FROM articles 
LEFT JOIN 
reads 
ON articles.id = reads.article_id AND reads.user_id = 9 
ORDER BY articles.last_update DESC LIMIT 5;

产生以下结果:

    articles.id    | reads.user_id
-------------------+-----------------
 57125839          |       9
 57065456          |
 56945065          |
 56945066          |
 56763090          |
(5 rows)

这很好。这就是我想要的。

我想使用我的文章模型在 Catalyst 中获得相同的结果,但我找不到任何选项来向 JOIN 子句添加条件。

你知道如何将 AND X = Y 添加到 DBIx JOIN 吗?

我知道这可以通过自定义结果源和虚拟 View 来完成,但我有一些其他查询可以从中受益,我想避免为每个查询创建虚拟 View 。

谢谢, 粤语

最佳答案

我什至不知道什么是 Catalyst 但我可以破解 SQL 查询:

select articles.id, reads.user_id 
from
    articles 
    left join 
    (
        select *
        from reads
        where user_id = 9
    ) reads on articles.id = reads.article_id
order by articles.last_update desc 
limit 5;

关于perl - JOIN 中的附加条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26933997/

相关文章:

regex - 如何在正则表达式中将 $1 与数字连接起来

arrays - 哈希键仅存储循环的最后一个元素

sql - 使用 Postgresql 计算数学级数

Java管理面板

ios - Mac Catalyst 应用程序在其他 Mac 上崩溃,但从 Xcode 运行时可以正常工作

perl - 如何按照添加元素的相同顺序打印散列?

linux - 如何检查 Linux shell 上是否设置了 "s"权限位?还是珀尔?

python - 将带有 `\` 的字符串转换为 json 或字典数据

perl - Perl 催化剂模板中的 sprintf 函数

perl - 为什么不建议使用create = dynamic?