首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个MySQL子查询可以用JOINs缩短吗?

这个MySQL子查询可以用JOINs缩短吗?
EN

Stack Overflow用户
提问于 2010-11-30 22:47:11
回答 3查看 113关注 0票数 1

我正在尝试查找'archive‘表中的所有条目,这些条目与任何行具有相同的workID,其中historyID为NULL,worktype = "WEST",并且completeDate至少已存在四个月。我使用子查询来完成此请求。有没有更有效的方法?我的问题如下。

代码语言:javascript
运行
复制
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号,这样更容易一目了然地理解查询。我将其添加到查询中。我没有全部复制和粘贴。糟了。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-30 23:26:36

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2010-11-30 23:01:11

您的查询和建议的解决方案的问题是,我们不知道表之间是如何关联的。您的存档中有哪些列也在工作类型中?

此外,你应该尽可能避免使用"IN“,因为它是低效的。

票数 0
EN

Stack Overflow用户

发布于 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个月);

左连接将获取第一个表中的所有条目,并将匹配的第二个表中的等效列附加到这些条目中。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4314968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档