子查询问题(SQL)

时间:2012-10-04 08:37:15

标签: sql subquery

我正面临着SQL查询的挑战。 基本上我想检索比各自的[传出任务]更晚出现[开始]的寄存器。

表格如下:

Main Project    Main Link    Name         Start            Outgoing tasks
A               1            A1           02.01.2012       A2   
A               1            A2           01.01.2012       A3

...

我写的查询就是这个:

SELECT [Name], [Start], [Outgoing tasks] 
FROM [Sheet1$] 
WHERE [Main project] = 'A' 
AND [Main link] = '1' 
AND [Outgoing tasks] IS NOT NULL 
AND [Start] > (SELECT [Start] 
        FROM [Sheet1$] 
        WHERE [Main project] = 'A' 
        AND [Main link] = '1' 
        AND [Name] =  [Outgoing tasks])

它不会返回任何错误,但它根本不会带来预期的结果。

你们知道可能出现什么问题吗? 非常感谢任何支持!!!

更多信息:

此表来自MS Project之类的应用程序。所以我们有一个里程碑,它的数据,继承者和前身。我真正需要的是一个里程碑列表,其开始日期晚于其后继者(这是项目管理视角中的错误)。所以如果A1.Start> A2.Start,然后我应该出现在结果中。如果您需要任何进一步的细节,请告诉我。

2 个答案:

答案 0 :(得分:1)

尝试

 select t1.* from [$Sheet1] t1
      inner join [$Sheet1] t2
           on t1.[main project] = t2.[main project]
           and t1.[main link] = t2.[main link]
           and t1.[outgoing tasks] = t2.name
           and t1.start>t2.start

答案 1 :(得分:0)

如果这是一个相关的子查询,则需要一种方法来引用内部查询中的外部语句表。在MySQL中你会这样做:

SELECT name, start, outgoing_tasks FROM sheet1 foo WHERE main_project = 'A' AND main_link = '1' AND outgoing_tasks IS NOT NULL AND start > (SELECT start FROM sheet1 bar WHERE main_project = 'A' AND main_link = '1' AND bar.name = foo.outgoing_tasks);

请注意,我为外部查询的表提供了foo的别名,而内部查询的表为bar的别名。然后我可以在嵌套(内部)查询的WHERE谓词中引用外表:... AND bar.name = foo.outgoing_tasks ...