【问题标题】:Still return JOIN result when no match不匹配时仍然返回 JOIN 结果
【发布时间】:2016-05-17 13:59:09
【问题描述】:

我的一个查询中有一个join,但是当join 什么都不返回时,主查询本身什么也不返回,并且不确定当join 失败时如何仍然运行查询。

SELECT 
"Wishlist".*, 
COUNT("WishlistItem".*) AS "wishlistItemCount" 
FROM "Wishlist" 
INNER JOIN "WishlistItem" 
ON ("WishlistItem"."wishlistId" = "Wishlist"."wishlistId") 
WHERE ((("Wishlist"."wishlistId" = $1) OR ("Wishlist"."userId" = $2)) 
AND 1=1) GROUP BY "Wishlist"."wishlistId" 
ORDER BY "Wishlist"."dateCreated" 
DESC

所以我想要Wishlist 的内容,即使WishlistItem 计数返回不匹配。

我在COUNT(*) 上尝试了coalesce,但这没有帮助

【问题讨论】:

    标签: sql postgresql join outer-join


    【解决方案1】:

    将其从内连接更改为左外连接。

    SELECT 
        "Wishlist".*, 
        COUNT("WishlistItem".*) AS "wishlistItemCount" 
    FROM "Wishlist" 
        LEFT OUTER JOIN "WishlistItem" 
        ON ("WishlistItem"."wishlistId" = "Wishlist"."wishlistId") 
    WHERE ((("Wishlist"."wishlistId" = $1) OR ("Wishlist"."userId" = $2)) 
        AND 1=1) GROUP BY "Wishlist"."wishlistId" 
    ORDER BY "Wishlist"."dateCreated" 
    DESC
    

    【讨论】:

    • 太棒了!谢谢将在 10 分钟内设置为答案 ;)
    猜你喜欢
    • 1970-01-01
    • 2013-05-10
    • 2015-10-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多