如何为单个基于左联接的 sql 命令识别过多的左联接
本文关键字:识别 命令 sql 单个基 于左联 | 更新日期: 2023-09-27 18:37:23
我想编写一个查询,而不是运行太多命令来获取问题列表。
有两种类型的用户:访客和注册用户。两者都在 2 种数据库中维护。
我正在写这个查询,所以请有人解释我如何区分它们。
SELECT * FROM question
LEFT JOIN `user` ON user.`ID` = question.`lastAnswererID`
LEFT JOIN guestusera ON guestusera.aID = question.lastAnswererID
请记住,用户表可能包含用户的属性,其中只有访客姓名 ID 和电子邮件地址。
现在我想计算声誉,但不知道如何将它们添加到这个中。
SELECT SUM(reputation) FROM action WHERE userid=?id AND reputation>0
后面跟着 ?id 是 guestusera.aId 和 user。所有 2 种情况下的 ID 分别(已注册和未注册)。
现在这是关于最后答案ID信息。我想从用户和guestuserq获取的另一件事是question.askerId。
现在我可以得到其他信息了。 我如何区分它们。 区分意味着我想知道用户是访客还是注册。如果user.lastanswererId为空,则表示用户已取消注册。
有人指导我如何混合所有这些命令。
if (rdr["lastAnswererID"] == DBNull.Value)
{
UserManager.UserSummary user = new UserManager.UserSummary();
user.Email = rdr["email"].ToString();
user.Name = rdr["name"].ToString();
user.URL = rdr["website"].ToString();
ques.LastAnswerer = user;
}
else
{
UserManager.UserSummary userSumm = new UserManager.UserSummary();
userSumm.ID = Convert.ToInt32(rdr["ID"]);
userSumm.Name = rdr["name"].ToString();
userSumm.HasPhoto = Convert.ToBoolean(rdr["hasPhoto"]);
ques.LastAnswerer = userSumm;
}
这就是我的 C# 代码处理此问题的方式。现在有人知道如何从用户表中访问提出问题的其他用户吗?有太多的用户被附加到这个问题。
这个问题的解决方案可以通过两种方式完成。
- 在 MySQL 中使用 CASE WHEN END 在 MySQL 中。
- MySQL 内联接。
内部联接更好,因此在发生此问题时可以使用它。