Mysql 如果一种类型在子查询之外,如何选择记录但排除?

Mysql 如果一种类型在子查询之外,如何选择记录但排除?,mysql,sql,Mysql,Sql,我们有多个invStatus值1-10,只想排除一个状态类型1,但只排除那些超过X天数的状态类型。因此,所有记录都会显示,但不会显示invStatus=1且年龄大于X天的记录。invStatus=1且小于X天将包含在记录集中 我是否一般地选择所有记录,然后在子查询中筛选那些状态为1且早于X天的记录 下面的查询使用NOT IN来尝试选择要排除的记录,但它不起作用,而且似乎效率低下,因为它需要几秒钟才能执行 SELECT tblinventory.invId, tblinvent

我们有多个invStatus值1-10,只想排除一个状态类型1,但只排除那些超过X天数的状态类型。因此,所有记录都会显示,但不会显示invStatus=1且年龄大于X天的记录。invStatus=1且小于X天将包含在记录集中

我是否一般地选择所有记录,然后在子查询中筛选那些状态为1且早于X天的记录

下面的查询使用NOT IN来尝试选择要排除的记录,但它不起作用,而且似乎效率低下,因为它需要几秒钟才能执行

SELECT 
    tblinventory.invId, 
    tblinventory.invTitle, 
    tblinventory.invStatus, 
    tblhouseinfo.Address, 
    tblhouseinfo.City, 
    tblhouseinfo.`State`, 
    tblhouseinfo.Zip, 
    tblhouseinfo.Update_date, 
    CURRENT_DATE() - INTERVAL 10 DAY AS dateEx 
FROM 
    tblinventory 
    LEFT OUTER JOIN tblhouseinfo ON tblinventory.invId = tblhouseinfo.addInfoID 
WHERE 
    invReleased = 0 
    AND invStatus NOT IN (SELECT invId from tblhouseinfo WHERE invStatus = 1 
AND tblhouseinfo.Update_date < CURRENT_DATE() - INTERVAL 10 DAY )

ORDER BY 
    `tblhouseinfo`.`Update_date` DESC
60条记录被排除在外,而不是预期的3条记录

2017-08-28是当前_日期-间隔10天的当前结果,应在10天范围内选择2017-09-06 10:53:17,并且仅排除2017-07-06 10:53:17的三条记录

最终工作方案/查询:

 SELECT 
    tblinventory.invId, 
    tblinventory.invTitle, 
    tblinventory.invStatus, 
    tblhouseinfo.Address, 
    tblhouseinfo.City, 
    tblhouseinfo.`State`, 
    tblhouseinfo.Zip, 
    tblhouseinfo.Update_date, 
    CURRENT_DATE() - INTERVAL 10 DAY AS dateEx 
FROM 
    tblinventory 
    LEFT OUTER JOIN tblhouseinfo ON tblinventory.invId = tblhouseinfo.addInfoID 
WHERE 
    invReleased = 0 
    AND NOT (invStatus = 1 AND tblhouseinfo.Update_date < CURRENT_DATE() - INTERVAL 10 DAY )
ORDER BY 
    `tblhouseinfo`.`Update_date` DESC

如果您知道永远不想要ID 1 invStatus 1,则无需从另一个表中选择invID。但你也可以在接下来的几天里加入一个和声明

在UNIX中,我总是使用时间戳来记录数据输入/修改

AND (timestamp >= beginTimestamp AND timeStamp <= endTimestamp)

如果您知道永远不想要ID 1 invStatus 1,则无需从另一个表中选择invID。但你也可以在接下来的几天里加入一个和声明

在UNIX中,我总是使用时间戳来记录数据输入/修改

AND (timestamp >= beginTimestamp AND timeStamp <= endTimestamp)

在不了解表格结构的情况下,很难提供准确的建议。通常,在查询中执行操作比在PHP之类的程序中迭代行要好。查询的另一个选项是使用JOIN。如果不知道表的结构,很难提供准确的建议。通常,在查询中执行操作比在PHP之类的程序中迭代行要好。查询的另一个选项是使用JOIN。您的建议从查询结果中删除了60条记录,如我对问题的更新中所述。谢谢,但这肯定比我目前理解的更多。解决方案:而不是invStatus=1和tblhouseinfo.Update_dateAND (timestamp >= beginTimestamp AND timeStamp <= endTimestamp)