PostgreSQL - 为什么 1 个搜索参数有效,但另一个搜索参数无效? (多个连接表)

PostgreSQL - Why 1 search paramater works, but not the other? (multiple joined tables)

所以我有一个查询,我 运行 基本上看起来像下面的查询(为了便于查看而对其进行了简化)。当我在 user_orders.orderID 上搜索时,它可以完美运行,但如果我尝试通过 user_orders.reference 进行搜索,它就会超时。

现在我假设这与我加入的一些表有关,其中没有参考号,所有表中都只有 orderID。但是,如果我可以直接搜索参考编号而不是 orderID,那将大大简化我的工作。

有什么解决方法的建议吗?

编辑:

已解决,谢谢大家!确实是 FULL OUTER JOIN 导致了问题,与常规 JOIN 相比,没有完全理解它做了什么。

SELECT
user_orders.reference,
user_orders.orderid,
transfers.username,
notifications.datestamp, 
orders.refund,
users.acac,
refunds.state,
decisionlog.data
FROM user_orders
FULL OUTER JOIN decisionlog ON user_orders.orderid = decisionlog.orderid
FULL OUTER JOIN refunds ON user_orders.orderid = refunds.orderid
FULL OUTER JOIN notifications ON user_orders.orderid = notifications.orderid
JOIN transfers ON user_orders.orderid = transfers.orderid
JOIN orders ON transfers.orderid = orders.orderid
JOIN users ON transfers.username = users.username
WHERE user_orders.orderid = xxx;

如评论中所建议,如果您在 decisionlogrefunds 中的任何一个中都没有 orderid notifications tables,此查询将 return 为 notifications.datestamps, refunds.state, decisionlog.data 的 null,但不会给您错误。

此外,考虑到使用 JOIN(INNER JOIN)将 return 您只会在 transferorder table 并且其用户位于 users table

SELECT
user_orders.reference,
user_orders.orderid,
transfers.username,
notifications.datestamp, 
orders.refund,
users.acac,
refunds.state,
decisionlog.data
FROM user_orders
LEFT JOIN decisionlog ON user_orders.orderid = decisionlog.orderid
LEFT JOIN refunds ON user_orders.orderid = refunds.orderid
LFET JOIN notifications ON user_orders.orderid = notifications.orderid
INNER JOIN transfers ON user_orders.orderid = transfers.orderid
INNER JOIN orders ON transfers.orderid = orders.orderid
INNER JOIN users ON transfers.username = users.username
WHERE user_orders.reference = xxx;