不匹配时仍然返回 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 结果的主要内容,如果未能解决你的问题,请参考以下文章
mysql中inner join和outer join有啥区别?