我试图在'archive'表中找到与historyID为NULL,worktype =“WEST”和至少四个月的completeDate具有相同workID的所有条目。我正在使用子查询来完成此请求。有更有效的方法吗?我的查询如下。
SELECT * from archive b WHERE b.workID IN
(SELECT a.workID FROM archive a, worktypes t
WHERE a.historyID IS NULL AND (t.worktype IN ('WEST') AND a.worktype = t.id)
AND a.completeDate >= DATE(NOW() - Interval 4 month));
附加信息:表格仅与工作类型相关。基本上我正在使用worktypes表,所以我可以键入'WEST'而不是给出一个id号,这样一目了然就更容易理解查询。我添加了查询。我没有复制并粘贴它们。糟糕。
谢谢!
答案 0 :(得分:1)
SELECT b.*
FROM archive b
INNER JOIN archive a
on b.workID = a.workID
AND a.historyID IS NULL
AND a.completeDate >= DATE(NOW() - Interval 4 month)
INNER JOIN worktypes t
ON a.worktype = t.id
AND t.worktype = 'WEST'
答案 1 :(得分:0)
您的查询和建议的解决方案的问题是我们不知道表格如何相互关联。您在归档中的哪个列也在工作类型中?
另外,你应尽可能避免使用“IN”,效率低下。
答案 2 :(得分:0)
是的,确定: SELECT * from archive a LEFT JOIN worktypes t ON a.workID = t.workID WHERE a.historyID IS NULL AND t.worktype IN('WEST')AND a.completeDate> = DATE(NOW() - Interval 4 month) );
LEFT JOIN将获取第一个表中的所有条目,并将匹配的第二个表中的等效列附加到它们。
希望这会有所帮助。