首页 > 解决方案 > 需要值为 UserID 或 NULL 的所有 MySQL 结果 - 没有额外的 UserID

问题描述

当用户在我的网站上并单击“添加”或“删除”项目时...添加或删除消息与有时应该是相反的。例如,当您单击一个按钮时,它会改变颜色。如果值不是“Y”,它将是灰色的,如果它是“Y”,它将是红色的。有时它是相反的。这是因为我使用 GROUP BY 子句下面的查询来避免重复(这发生在集合表中,因为每个用户都向这个 Intersection 表添加了一条新记录)。如果没有 group by 子句,就会有很多重复项。

SELECT a.AmiiboID, a.Name, a.ImageURL, c.Favorited, c.Collected, c.WishList, c.UserID
FROM Amiibo a
LEFT JOIN Collection c ON a.AmiiboID = c.AmiiboID
GROUP BY a.AmiiboID

上述查询的结果:

我也试过这样做:

SELECT a.AmiiboID, a.Name, a.ImageURL, c.Favorited, c.Collected, c.WishList, c.UserID
FROM Amiibo a
LEFT JOIN Collection c ON a.AmiiboID = c.AmiiboID
WHERE c.UserID = 2 OR c.UserID IS NULL

上述查询的结果...注意 AmiiboID 0-4 丢失,因为它们是由 UserID1 添加的

上述查询的结果...注意 AmiiboID 0-4 丢失,因为它们是由 UserID1 添加的

但是,这样做的问题是它排除了另一个用户添加的记录。因此,如果用户 ID 1 输入了第 1-5 行...它不会显示第 1-5 行。

我需要始终从 Amiibo 表和 Collection 中具有 UserID 2 的记录(在本例中)获取所有记录。如果另一个用户(例如 UserID: 1)添加了一条记录,则忽略它们。我还需要没有重复。

这可能吗?

谢谢你,特拉维斯 W。

标签: mysql

解决方案


使用时将c.UserID检查放在ON子句中LEFT JOIN

SELECT a.AmiiboID, a.Name, a.ImageURL, c.Favorited, c.Collected, c.WishList, c.UserID
FROM Amiibo a
LEFT JOIN Collection c 
    ON a.AmiiboID = c.AmiiboID
        AND c.UserID = 2

NULL在这种情况下无需检查。


推荐阅读