MySQL子查询AND'NOT IN'

时间:2011-11-08 16:01:21

标签: mysql subquery limit

对不起,如果之前已经回答过;我有点不确定如何最好地描述这个问题,不要介意搜索它。但是这里......

基本上我有一个'项目'表,其中包含'id'和'title'。我还有一个'projects_history'表,当(IF)项目被设置为archived(一个布尔值)时,它保存信息。它有一个引用项目的“pid”键 - 每个项目在更新时可以有多个记录(为了跟踪谁将值设置为什么)。

还有一个'project_enquiries'表,其中包含有关为项目提出的查询的信息,因此有一个'pid'键引用了'项目'。类似地,有一个'project_enquiry_history'表,记录查询何时(IF)设置为关闭(布尔值)。它有一个引用project_enquiry的'eid'键 - 每次查询更新时都可以有多个记录(为了跟踪谁将值设置为什么)。

我的查询旨在提取尚未归档的项目(因此要么'project_history'中没有记录,要么项目的最新记录'已归档'= 0),这些记录仍然存在open(所以要么'project_enquiry_history'中没有记录,要么最近的查询记录'open'= 1)。

我真的在努力从哪里开始查询。

1 个答案:

答案 0 :(得分:0)

首先,如果project_history中没有记录,那么您需要使用left join表格projectsproject_history project_history项目ID来发现这个。结果中的条目在SELECT * from project p LEFT OUTER JOIN project_history ph ON P.ID=ph.pid LEFT OUTER JOIN project_enquiry_history peh ON peh.ID=ph.pid WHERE (archived is NULL OR archived=0) AND (open is NULL OR open=1)的列中为空,其中没有相应的条目。然后,您可以链接该流程,使用结果在'project_enquiry_history'上执行另一个左连接,以查找没有条目的项目。

您也可以正常使用这些结果来选择数据。

它看起来像:

{{1}}

如果你正在使用时间戳等,你可能需要调整它以找到最新的。