2015-06-28 45 views
0

我需要从不同的数据库中选择不同的字段。其中一个字段是从不同表格中选择LastUpdateOn日期时间字段的最大值。选择不同表格中的字段

{项目},{文件},{指导},{文件},{用户},{ProjectParticipant}是不同的表

SELECT {Project}.[Number],{Project}.[Name],{User}.[Last_Login],{A}.[max_LastUpdatedOn] 

From {Project} 

INNER JOIN {ProjectParticipant} ON {Project}.[Id] = {ProjectParticipant}.[ProjectId] 
INNER JOIN {User} ON {ProjectParticipant}.[UserId] = {User}.[Id] AND {User}.[Username] = @UserId 
INNER JOIN {Document} ON {Project}.[Id] = {Document}.[ProjectId] 
INNER JOIN {InstructionType} ON {Project}.[Id] = {Instruction}.[ProjectId] 
INNER JOIN {Question} ON {Project}.[Id] = {Question}.[ProjectId] 

SELECT MAX(LastUpdatedOn) AS max_LastUpdatedOn 
FROM 
(
    SELECT LastUpdatedOn FROM {Question} 
    UNION ALL 
    SELECT LastUpdatedOn FROM {Document} 
    UNION ALL 
    SELECT LastUpdatedOn FROM {Instruction} 
) A; 

GROUP BY {Project}.[Number], 
     {Project}.[Name], 
     {User}.[Last_Login] 
     {A}.[max_LastUpdatedOn] 
ORDER BY {Project}.[Number] 

但得到一个错误说{A}是一个未知的实体。我不确定这里有什么问题。 使用

SELECT {Project}.[Number],{Project}.[Name],{User}.[Last_Login], 
(SELECT MAX(LastUpdatedOn) as max_LastUpdatedOn 
FROM 
(
    SELECT {Question}.[LastUpdatedOn] where {Project}.[Id] = {Question}.[ProjectId] 
    UNION ALL 
    Select {Document}.[LastUpdatedOn] where {Project}.[Id] = {Document}.[ProjectId] 
    UNION ALL 
    SELECT {Instruction}.[LastUpdatedOn] where {Project}.[Id] = {Instruction}.[ProjectId] 
) 
    A) [max_LastUpdatedOn] 

FROM {Project} 
INNER JOIN {ProjectParticipant} ON {Project}.[Id] = {ProjectParticipant}.[ProjectId] 
INNER JOIN {User} ON ({ProjectParticipant}.[UserId] = {User}.[Id] AND {User}.[Username] = @UserId) 
INNER JOIN {Question} ON {Project}.[Id] = {Question}.[ProjectId] 
INNER JOIN {Document} ON {Project}.[Id] = {Document}.[ProjectId] 
INNER JOIN {Instruction} ON {Project}.[Id] = {Instruction}.[ProjectId] 

GROUP BY {Project}.[Number], 
      {Project}.[Name], 
      {User}.[Last_Login], 
      A.[max_LastUpdatedOn] 
ORDER BY {Project}.[Number] 

获取像的多部分标识符“A.max_LastUpdatedOn”的错误不能被绑定尝试。

+0

为爱皮特摆脱了squ。。什么是A.如果A是数据库它将如何工作 – Drew

+0

A存储问题文档和指令表中的LastUpdatedOn字段的最大值 – trx

+0

存在相当多的问题;你正在使用无效的语法(在MySQL中无效的'{}'和'[]'),只是将获取last_updated的查询插入到另一个查询中是行不通的。如果你指定了你的表格以及它们如何连接以及你想要做什么,那将是最好的。 – jpw

回答

0

{A}不是一个OutSystems实体,因此您不应该使用大括号来引用它。花括号用于将设计时的元模型名称转换为数据库中的物理表名

由于A是内部select语句的简单别名,只是使用A应该足以使其工作。例如:

SELECT {Project}.[Number],{Project}.[Name],{User}.[Last_Login],A.[max_LastUpdatedOn] 

UPDATE

关于有关The multi-part identifier could not be bound错误,它由东西是不是在查询的from/join源分组做。

我还没有试过下面这段代码,但这样的事情应该做的伎俩:
(另请参见关于如何选择SQL MAX of multiple columns?这里更多的方法)

SELECT {Project}.[Number], {Project}.[Name], {User}.[Last_Login], 
    CASE 
     WHEN {Question}.[LastUpdatedOn] >= {Document}.[LastUpdatedOn] AND {Question}.[LastUpdatedOn] >= {Instruction}.[LastUpdatedOn] 
     THEN {Question}.[LastUpdatedOn] 
     WHEN {Document}.[LastUpdatedOn] >= {Instruction}.[LastUpdatedOn] THEN {Document}.[LastUpdatedOn] 
     ELSE {Instruction}.[LastUpdatedOn] 
    END AS max_LastUpdatedOn 
FROM {Project} 
INNER JOIN {ProjectParticipant} ON {Project}.[Id] = {ProjectParticipant}.[ProjectId] 
INNER JOIN {User} ON ({ProjectParticipant}.[UserId] = {User}.[Id] AND {User}.[Username] = @UserId) 
INNER JOIN {Question} ON {Project}.[Id] = {Question}.[ProjectId] 
INNER JOIN {Document} ON {Project}.[Id] = {Document}.[ProjectId] 
INNER JOIN {Instruction} ON {Project}.[Id] = {Instruction}.[ProjectId] 
GROUP BY {Project}.[Number], 
     {Project}.[Name], 
     {User}.[Last_Login] 
ORDER BY {Project}.[Number] 
+0

只是给A也不在这里工作。 – trx

+0

我试着用问题中所示的只是A,但即使这给我一个错误,像多部分标识符“A.max_LastUpdatedOn”无法绑定。 – trx

+0

嗯,但这是另一个问题...错误说“{A}是一个未知的实体”是通过删除大括号来修复的。“多部分标识符不能被绑定”是由于对任何'FROM' /'JOIN'子句中不存在的东西尝试'GROUP BY'造成的。 –

相关问题