不匹配时仍然返回 JOIN 结果

Posted

技术标签:

【中文标题】不匹配时仍然返回 JOIN 结果【英文标题】:Still return JOIN result when no match 【发布时间】: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,但这没有帮助

【问题讨论】:

【参考方案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 分钟内设置为答案 ;)

以上是关于不匹配时仍然返回 JOIN 结果的主要内容,如果未能解决你的问题,请参考以下文章

sql匹配另一张表,匹配不到返回原值

mysql中inner join和outer join有啥区别?

未找到匹配记录时返回 NULL

一张图看懂Mysql的join连接

left joinright join和inner join

left joinright join和inner join