我正在尝试查找'archive‘表中的所有条目,这些条目与任何行具有相同的workID,其中historyID为NULL,worktype = "WEST",并且completeDate至少已存在四个月。我使用子查询来完成此请求。有没有更有效的方法?我的问题如下。
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));附加信息:这些表仅按工作类型相关。基本上,我使用工作类型表,这样我就可以输入'WEST‘,而不是给出一个id号,这样更容易一目了然地理解查询。我将其添加到查询中。我没有全部复制和粘贴。糟了。
谢谢!
发布于 2010-11-30 23:26:36
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'发布于 2010-11-30 23:01:11
您的查询和建议的解决方案的问题是,我们不知道表之间是如何关联的。您的存档中有哪些列也在工作类型中?
此外,你应该尽可能避免使用"IN“,因为它是低效的。
发布于 2010-11-30 23:01:13
当然可以: SELECT * from archive a LEFT JOIN工作类型t ON a.workID=t.workID,其中a.historyID为NULL,t.worktype IN ('WEST')和a.completeDate >= DATE(NOW() -间隔4个月);
左连接将获取第一个表中的所有条目,并将匹配的第二个表中的等效列附加到这些条目中。
希望这能有所帮助。
https://stackoverflow.com/questions/4314968
复制相似问题