我的头撞在墙上。。我有两个表,订单和批次。我正在使用PostgreSQL 9。
这些查询按照我的预期工作并返回结果:
查询#1(正常工作,返回订单#12、#8等):
SELECT "orders".*
FROM "orders"
INNER JOIN "batches" ON "batches"."order_id" = "orders"."id"
WHERE (order_id not IN (14,4,13,5,2,9,3,7,11));
查询#2(正常工作,返回具有批次的唯一订单ID,这些批次的估计结束日期晚于2019-08-06-与上面列出的数字相同):
SELECT DISTINCT "batches"."order_id"
FROM "batches"
WHERE (estimated_end_date >= '2019-08-06');
但是,如果将select查询#2替换为数字列表,则返回的结果与查询#1的结果不同:
SELECT "orders".*
FROM "orders"
INNER JOIN "batches" ON "batches"."order_id" = "orders"."id"
WHERE (order_id not IN (SELECT DISTINCT "batches"."order_id"
FROM "batches"
WHERE (estimated_end_date >= '2019-08-06')))
我做错了什么?如何使嵌套子查询正常工作?谢谢您!
您可以转换此查询
SELECT "orders".*
FROM orders
INNER JOIN "batches" ON "batches"."service_order_id" = "service_orders"."id"
WHERE (service_order_id not IN (SELECT DISTINCT "batches"."service_order_id"
FROM "batches"
WHERE (estimated_end_date >= '2019-08-06')))
到联接
SELECT orders.*
FROM orders
INNER JOIN "batches" ON "batches"."service_order_id" = orders.id
LEFT JOIN batches AS S ON s.service_order_id = orders.id and s.estimated_end_date >= '2019-08-06'
WHERE S.service_order_id is null
不要将not in
与子查询一起使用。如果任何返回的值都是null
,那么您将根本不会得到任何结果。改用不存在
:
SELECT so.*
FROM service_orders so INNER JOIN
batches b
ON b.service_order_id = so.id
WHERE NOT EXISTS (SELECT
FROM batches b2
WHERE b2.estimated_end_date >= '2019-08-06' AND
b2.service_order_id = b.service_order_id
);
有更简单的方法来表达这种逻辑,例如使用窗口函数:
SELECT so.*
FROM service_orders so INNER JOIN
(SELECT b.*,
MAX(b.estimated_end_date) OVER (PARTITION BY b.service_order_id) as max_eed
FROM batches b
) b
ON b.service_order_id = so.id
WHERE max_eed <= '2019-08-06' ;
添加条件:
"batches"."order_id" IS NOT NULL
在子查询中避免将order_id
与null
s进行比较:
SELECT "service_orders".*
FROM "service_orders" INNER JOIN "batches"
ON "batches"."order_id" = "orders"."id"
WHERE order_id not IN (
SELECT DISTINCT "batches"."order_id"
FROM "batches"
WHERE estimated_end_date >= '2019-08-06' AND "batches"."order_id" IS NOT NULL
)
问题内容: 我试图在postgres函数内返回查询结果。我尝试了一下,并完美地工作了: 问题是我需要一些东西来返回以下结果: 我需要什么回报,或者应该改变什么才能实现这一目标? 问题答案: 这可以通过一个简单的SQL函数来完成: 可以在手册中找到更多详细信息和示例:http : //www.postgresql.org/docs/current/static/xfunc-sql.html#XFUN
问题内容: 我有这个映射: 而这个查询: 我等待25个结果,因为我有25个后索引。但是我得到一个空集。如果我删除嵌套的过滤器,一切正常。我希望能够过滤嵌套对象 在我的设置中,我有: 我在这里缺少什么。 谢谢 问题答案: 简短版本: 尝试此操作(更新端点和索引名称后): 它对我有用,并且简化了您的设置。稍后,我将发布带有较长解释的编辑。 编辑:长版: 查询的问题是分析器与查询中的过滤器结合在一起。您
我很好奇是否可以在以下情况下使用orElseThrow(),或者是否有更Java的8种方法可以将其等效为1行?
我遇到了一些实际的问题,比如使用字段增强来处理ElasticSearch。我已经看过关于这个主题的Nest文档,但它们没有特别大的帮助,所以我的代码实际上是基于这个问题的解决方案:使用Nest Field Boosting进行弹性搜索。 如果运行以下查询,我会得到一个结果,正如预期的那样: 然而,如果我尝试使用场增强,使用以下方法,我没有得到匹配: .OnFieldsWithBoost(d=>d.
我正在尝试用结果映射部分测试MyBatis的用户手册。Mybatis版本:Mybatis-3.1.0 为什么没有调用getAuthor?难道不应该在我调用getBlog()时调用它吗?
我有这个方法,我首先检查一个用户是否是admin,如果你是admin,你将从数据库中得到一个用户列表。但是VS告诉我,我必须在IF admin括号之外再加上一个返回,我完全失去了我应该返回什么?因为你不是管理员,所以你不能返回任何东西