0

我有一个具体的问题。我需要从数据库中获取一些数据。我有一种从程序中检索数据的机制。我需要使用它,不能修改。原始查询是:

SELECT it_Symbol AS Symbol, tt_Name AS Nazwa, tt_Price AS Cena, 
       tt_Quantity AS Ilosc, tt_Id
FROM  tr__Transaction INNER JOIN  tr_Item 
                      ON tt_TransId=tr_Id LEFT OUTER JOIN  it__Item 
                      ON tt_ItemId = it_Id RIGHT JOIN  reg_Site 
                      ON tr_SiteId = rs_Id LEFT OUTER JOIN  it_ItemSite 
                      ON it_Id = is_ItemId
WHERE tt_TransId=@transId 
GROUP BY tt_Id, tt_Quantity, tr_Id, it_Name, tt_Price,it_Symbol, 
         is_Name, tt_Name, tt_ItemId, tt_Id

问题是I need to get some additional data from tr__Transaction table. 它有一个字段tr_Source。我需要此字段值,但对于已在返回字段中列出的tr__transaction记录。tr_Idtt_Id

有什么方法可以执行子查询返回取决于 tt_Id 列值的值吗?或者可能有任何其他连接组合?我已经花了整整一周的时间,并且没有更多的想法或技能来做到这一点:/任何帮助将不胜感激。

4

2 回答 2

0

我不确定我是否正确理解了您的问题,但假设您说原始 SQL 语句无法更改(即,它处于只读视图中)。然后你可以将它包裹在另一个 SELECT 语句中。

SELECT  tblOriginal.*, tblExtend.tt_Source
FROM    (
        SELECT it_Symbol AS Symbol, tt_Name AS Nazwa, tt_Price AS Cena, 
               tt_Quantity AS Ilosc, tt_Id
        FROM  tr__Transaction INNER JOIN  tr_Item 
                              ON tt_TransId=tr_Id LEFT OUTER JOIN  it__Item 
                              ON tt_ItemId = it_Id RIGHT JOIN  reg_Site 
                              ON tr_SiteId = rs_Id LEFT OUTER JOIN  it_ItemSite 
                              ON it_Id = is_ItemId
        WHERE tt_TransId=@transId 
        GROUP BY tt_Id, tt_Quantity, tr_Id, it_Name, tt_Price,it_Symbol, 
                 is_Name, tt_Name, tt_ItemId, tt_Id
        ) AS tblOriginal
        INNER JOIN tr__Transaction AS tblExtend
        ON tblOriginal.tt_Id = tblExtend.tt_Id

但我怀疑你的问题比你花了一个多星期的时间更复杂。在那种情况下,你能详细说明吗?

于 2012-12-14T14:05:40.830 回答
0

好的,仍然不知道你需要什么,但它是一个清理问题的尝试。因此,这是答案的工作版本,因为您无法在注释中格式化代码。

请解释某些关系是否错误。

只要表具有不同的别名,您就可以在不同的条件下多次连接表。

例如:

SELECT c.it_Symbol AS Symbol, a.tt_Name AS Nazwa, a.tt_Price AS Cena, 
       a.tt_Quantity AS Ilosc, a.tt_Id, f.tr_Source 
FROM  tr__Transaction a 
    INNER JOIN  tr_Item b
                      ON a.tt_TransId=b.tr_Id 
    LEFT OUTER JOIN  it__Item c
                      ON a.tt_ItemId = c.it_Id 
    RIGHT JOIN  reg_Site d
                      ON a.tr_SiteId = d.rs_Id 
   LEFT OUTER JOIN  it_ItemSite e
                      ON c.it_Id = e.is_ItemId
   LEFT OUTER JOIN tr__Transaction f
                      ON c.tt_id = f.tr_id
WHERE a.tt_TransId=@transId 
GROUP BY a.tt_Id, a.tt_Quantity, a.tr_Id, c.it_Name, a.tt_Price,c.it_Symbol, 
         e.is_Name, a.tt_Name, a.tt_ItemId, a.tt_Id
于 2012-12-14T13:56:03.883 回答