SQL在给定的集合中选择IN不会缩小范围

本文关键字:IN 缩小 范围 选择 集合 SQL | 更新日期: 2023-09-27 18:26:59

我有一个包含电子邮件(称为邮件)的表,我想将特定消息标记为分配给不同的工作团队(例如team01、team02等)。消息<->团队关系保存在另一个表中(称为MailAssignments)。我正在尝试获取标记为只针对一个团队(比如team01)的消息,并且消息ID应该小于指定值,以便将消息集缩小到10。

我有下面的查询,但它总是显示分配给团队的所有消息,而不是只显示msgId<指定。

我的查询出了什么问题?

string queryGetMails =
"SELECT TOP 10 * FROM Mails WHERE msgId IN (SELECT msgId FROM MailAssignments WHERE (forTeam='team01') AND (msgId < ?) )";

我也试过这个(结果是一样的):/

"SELECT TOP 10 * FROM Mails WHERE (msgId<?) AND (msgId IN (SELECT msgId FROM MailAssignments WHERE forTeam='team01' ) )";

SQL在给定的集合中选择IN不会缩小范围

当两个表之间似乎有明确的联接时,为什么坚持使用子查询和子句?你试过这个吗?

SELECT TOP 10 Mails.* 
FROM Mails left join 
MailAssignments On Mails.msgID = MailAssignments.msgID 
WHERE Mails.msgId < ? AND MailAssignments.forTeam = 'team01'