【问题标题】:Need to write a multiple SELECT statement in MySQL需要在 MySQL 中编写多个 SELECT 语句
【发布时间】:2012-11-30 10:34:19
【问题描述】:

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

我想做什么:
我有两张桌子,projectjiraissue

表:项目

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) 

表格:jir​​aissue

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 年之前更新的最新问题 (jiraissue.UPDATED) 的项目名称 (project.pname)。

示例:
我得到了一个项目 ABC,它的最新问题是 2012 年 11 月 21 日更新的。另一个项目 XYZ 的最新一期最后更新于 08.12.2011。
所以我的 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 个项目,而且选择所有项目?

【问题讨论】:

  • 两个表中的 pkey 和 ID 相同?
  • pkey 是项目的缩写。在表项目中,例如项目 AKS-Infra 是 pkey AKSI。该项目中问题的 pkey 是 pkey + ID,因此 id 7 的问题具有 pkey ASKI-7

标签: mysql sql multiple-select


【解决方案1】:

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

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

现在,这将为您提供所需的所有主要信息。在 group by 之后应用 HAVING 子句以排除 2012 年和未来的任何项目。您不能将其作为 WHERE 子句应用,因为您的示例描述了您不想要任何有电流的东西(例如您的 ABC 项目)并且只想要 XYZ 项目。

通过加入项目表并通过该项目/更新组合再次将 JiraIssue 表加入到 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 并接受!现在我也知道'PreQuery'了!再次感谢您!
【解决方案2】:

试试这个

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

【讨论】:

  • 感谢您的脚本。但我需要一个向我展示所有项目的脚本。这里只显示 ID 为 10472 的项目...我得到了 378 个项目:/
  • 现在看我的更新,刚刚删除了项目的最后一个位置,它应该显示所有项目
  • 现在我得到了 100 行相同的项目...只是相同的项目。我尝试查看您的代码。谢谢
  • 刚刚编辑了您的代码。我需要将项目 ID 与问题项目的 ID 进行比较
  • 好的,我不能编辑你的代码...用 p.ID 替换 p.key 和用 PROJECT 替换 pkey
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 2013-09-09
  • 2021-04-17
相关资源
最近更新 更多