【问题标题】:Typeorm MINUS operatorTypeorm 减号运算符
【发布时间】:2021-12-03 05:10:45
【问题描述】:

我正在尝试在 SQL 中做一些不同的事情。我发现了 MINUS 运算符,它似乎完全符合我的需要:https://www.geeksforgeeks.org/sql-minus-operator/

我试图弄清楚是否有办法通过 typeorm 使用这个运算符。我目前正在使用connection.getRepository().createQueryBuilder(),并且在生成的查询生成器上看不到任何看起来与 MINUS 运算符相对应的方法。

关于我正在尝试做的事情的额外背景: 我有一个请求表/实体,每个请求都有一个字段指定与请求相关的内部资源,我们称之为target_id。我想查找所有超过 1 个月的请求,但仅限于同一 target_id 上没有超过 1 个月的其他请求。

编辑: 实际上,更多地考虑这一点,我什至不确定 MINUS 运算符是否完全符合我的要求。我可以写类似的东西 SELECT * from request WHERE request.updated_at < :deadline MINUS SELECT * from request WHERE request.updated_at > :deadline,但问题是它总是只返回第一个 SELECT 的结果,因为两个结果集之间永远不会有任何确切的重叠。缺少的是一种比较两个结果集并找到共享 target_id 的结果集并从第一个集中删除与第二个集中的任何结果共享 target_id 的结果的方法。我认为可能有某种方法可以通过某种 JOIN 来做到这一点,但这超出了我使用 SQL 的能力。非常感谢这里的任何指导!

【问题讨论】:

  • 请阅读此内容并编辑您的问题以包含一个具体示例:Why should I provide a Minimal Reproducible Example for a very simple SQL query?
  • 或许WHERE request.updated_at < :deadline AND target_id NOT IN (SELECT target_id from request WHERE requeted.updated_at > :deadline)
  • 做到了!谢谢@DemiPixel!!!
  • @DemiPixel,如果您将您的评论添加为问题的正确答案,我将接受它作为答案并关闭此问题。这样你就可以得到充分的帮助!

标签: sql typeorm


【解决方案1】:

Typeorm 似乎不直接支持 MINUS,但是在这种情况下,您可以通过使用子查询来达到相同的效果:

SELECT *
FROM request
WHERE request.updated_at < :deadline
    AND target_id NOT IN (
        SELECT target_id
        FROM request
        WHERE requeted.updated_at > :deadline
    )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2021-03-10
    相关资源
    最近更新 更多