需要在MySQL中编写多个SELECT语句

时间:2012-11-30 10:34:19

标签: mysql sql multiple-select

我尝试使用多个SQL语句创建一个MySQL语句。

我想做什么:
我得到两张桌子project& jiraissue

表:项目

Columns:
ID  decimal(18,0) PK 
pname   varchar(255) 
URL varchar(255) 
LEAD    varchar(255) 
DESCRIPTION text 
pkey    varchar(255) 
pcounter    decimal(18,0) 
ASSIGNEETYPE    decimal(18,0) 

表:jiraissue

Columns:
ID  decimal(18,0) PK 
pkey    varchar(255) 
PROJECT decimal(18,0) 
REPORTER    varchar(255) 
ASSIGNEE    varchar(255) 
issuetype   varchar(255) 
SUMMARY varchar(255) 
DESCRIPTION longtext 
ENVIRONMENT longtext 
PRIORITY    varchar(255) 
RESOLUTION  varchar(255) 
issuestatus varchar(255) 
CREATED datetime 
UPDATED datetime 
DUEDATE datetime 
VOTES   decimal(18,0) 
TIMEORIGINALESTIMATE    decimal(18,0) 
TIMEESTIMATE    decimal(18,0) 
TIMESPENT   decimal(18,0) 
WORKFLOW_ID decimal(18,0) 
SECURITY    decimal(18,0) 
FIXFOR  decimal(18,0) 
COMPONENT   decimal(18,0) 

我的目标是获取最新问题在2012年之前更新的项目名称(project.pname)(jiraissue.UPDATED)。

示例:
我得到了一个项目 ABC ,最新的问题在21.11.2012更新。另一个项目 XYZ 的最新问题于2011年12月8日更新。
所以我的SQL脚本应该给我第二个项目的名称​​ XYZ 但不是第一个 ABC

这里有一个工作脚本,可以找出最新的STATIC项目ID:

SELECT 
    pkey
FROM
    jiraissue
WHERE
    UPDATED = (SELECT 
            max(UPDATED)
        FROM
            jiraissue
        WHERE
            PROJECT = 10472)

但是当我想要所有这些项目的项目名称时,脚本现在怎么样?我的所有尝试都花费了大量的处理时间,并给出了未确定的错误......

修改 现在我得到以下代码:

select 
    p.pname, j.pkey
from
    project p
        inner join
    jiraissue j ON j.ID = (select 
            PROJECT
        from
            jiraissue
        where
            UPDATED = (SELECT 
                    max(UPDATED)
                from
                    jiraissue))
        AND p.ID = j.PROJECT

结果只是第一个具有最低密钥的项目...如何浏览所有项目?

修改

select 
    p.pname, j.pkey, j.UPDATED
from
    project p
        inner join
    jiraissue j
where
    j.ID = (select 
            PROJECT
        from
            jiraissue
        where
            UPDATED = (SELECT 
                    max(UPDATED)
                from
                    jiraissue
                where
                    UPDATED < '2012-01-01 00:00:00'))
        and p.ID = j.PROJECT

显示我想要的所有内容。但只是第一个项目。所以我需要所有项目!我如何选择不仅仅是1个项目而是选择所有项目?

2 个答案:

答案 0 :(得分:1)

首先开始你想要什么?在每个项目的基础上,2012年之前更新的最新问题是什么。暂时忽略项目表..

select
      JI.Project,
      MAX( JI.Updated ) as LastUpdated
   from
      JiraIssue JI
   group by
      JI.Project
   having 
      LastUpdated < '2012-01-01'

现在,这将为您提供所需的所有主要信息。 HAVING子句在分组后应用,以排除2012和未来的任何项目。您不能将它作为WHERE子句应用,因为您的示例描述了您不需要任何具有当前内容的项目(例如您的ABC项目)并且只需要XYZ项目。

使用此作为获取其余数据的基础,方法是加入项目表并通过该项目/更新组合将AGAIN加入JiraIssue表

select
      P.*,
      JI2.*
   from
      ( select
              JI.Project,
              MAX( JI.Updated ) as LastUpdated
           from
              JiraIssue JI
           group by
              JI.Project
           having 
              LastUpdated < '2012-01-01' ) PreQuery

         JOIN Project P
            on PreQuery.Project = P.ID

         JOIN JiraIssue JI2
            on PreQuery.Project = JI2.Project
           AND PreQuery.LastUpdated = JI2.Updated

答案 1 :(得分:0)

尝试使用此

  SELECT pname FROM project p
  INNER JOIN jiraissue j
   ON p.ID = (SELECT  ID
                FROM jiraissue
                WHERE
               UPDATED = (SELECT  max(UPDATED)
                FROM jiraissue ))