mysql - 需要值为 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 添加的
但是,这样做的问题是它排除了另一个用户添加的记录。因此,如果用户 ID 1 输入了第 1-5 行...它不会显示第 1-5 行。
我需要始终从 Amiibo 表和 Collection 中具有 UserID 2 的记录(在本例中)获取所有记录。如果另一个用户(例如 UserID: 1)添加了一条记录,则忽略它们。我还需要没有重复。
这可能吗?
谢谢你,特拉维斯 W。
解决方案
使用时将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
在这种情况下无需检查。
推荐阅读
- java - 如何同时在数组中添加不同的对象并将它们存储起来以供下一步使用?
- linux - Cygwin 目标的交叉编译器
- python - 如何正确地将我的列表更改为字符串?
- python - 在 macOS Sierra 上使用 pygame:libc++abi.dylib:以 NSException 类型的未捕获异常终止
- html - 我如何使我的网格 html 和 css 居中?(专辑)
- java - JavaFX 15 库不适用于 IntelliJ 中的 Java 14
- r - 如何将颜色归因于ggplot2中的因子水平
- excel - 运行时错误 1004 应用程序定义或对象定义错误
- python - python函数中的变量+ = 1错误地添加了2
- java - 如何通过代码更改全局强调色