2015-09-07 28 views
0

好奇的是,看看是否有方法來編寫下面的T-SQL語句(這一個錯誤無法在嵌套選擇中綁定TableA)。移除錯誤行似乎考慮來自TableB的所有記錄,然後執行連接。如何限制在連接內的嵌套選擇中考慮的記錄?

select * 
from TableA A 
    join (
     select TableAid, TableBinfo 
     from TableB 
     where TableB.TableAid = A.TableAid -- error line 
     group by TableAid, TableBinfo 
    ) B on 
     A.TableAid = B.TableAid 
where A.TableAid = 123 

下面的SQL是我能期待的最好的嗎?

我真的想限制獨特的比較,只是在一個表中的一列,而不是我選擇的所有列。我不控制數據庫,它除了主鍵之外沒有任何索引。

select A.TableAid, B.TableBinfo 
from TableA A 
    join TableB B on 
     A.TableAid = B.TableAid 
where A.TableAid = 123 
group by A.TableAid, B.TableBinfo 
+0

其實和第二選擇是一樣的。那麼用DISTINCT來代替呢? – bksi

+0

Distinct vs Group By應該是相同的,但我已經看到我們的查詢需要更長的時間與Distinct可能是因爲他們的建設。 –

回答

3

你的第一個例子看起來像你試圖做一個施工在相關子查詢:第一

SELECT * 
    FROM TableA a 
    CROSS APPLY 
    (
     SELECT t.TableBInfo 
      FROM TableB t 
      WHERE a.TableAId = b.TableBId 
      GROUP BY b.TableBInfo 
    ) b 
    WHERE a.TableAId = 123 
+0

真正美麗。 –