【发布时间】:2018-10-08 23:45:32
【问题描述】:
我写了请求,但我担心它可能非常未优化,我会遇到问题。
任务:查找没有债务且最近一次付款超过 2 年的用户。没有任何订单的不必要用户
我们有两张桌子:
用户 tbl (Id (int), LastName (string))
Order tbl (Id (int), UserId (int), IsPaid (bool), DatePaid (Date, not null))
我写了一个 Sql 请求,但我担心我有 20k 的用户和大量的订单
我找到了所有没有债务的人,最后一次还款是两年。
现在我想将它们从常规列表中删除,以便保留需要我的用户。
这似乎是个坏主意
SELECT u."Id"
FROM "User" AS u
LEFT JOIN
(SELECT *
FROM "Order"
WHERE "UserId" IN
(SELECT "Id"
FROM "User"
WHERE "Id" NOT IN
(SELECT DISTINCT "UserId"
FROM "Order"
WHERE "IsPaid" IS FALSE )
)
AND "DatePaid" > '2016-10-10'
) AS p
ON p."UserId" = u."Id";
【问题讨论】:
-
我猜你快到了。请标记您的数据库和一些示例数据。我们一定会帮助您改善答案。感谢您的努力。
-
为什么嵌套选择中有
IsConfirmedOnAccountingSystem而不是外部查询中有它?也许我遗漏了一些东西,但感觉你有点过于复杂了。 -
您能更正您的架构摘要吗?我猜 IsConfirmedOnAccountingSystem == IsPaid 和 DateConfirmed == DatePaid?
-
抱歉,它必须是“IsPaid”而不是“IsConfirmedOnAccountingSystem”
-
请说明您如何知道某人是否没有债务。并用您正在使用的数据库标记您的问题。
标签: sql postgresql