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