簡體   English   中英

T-SQL從一個表中選擇列,其中另一個表中的id

[英]T-SQL Select columns from one table where id in another table

不久前 ,我問了這個問題: 在T_SQL的Taks記錄中添加附件,並很好地回答了我的問題。

但是,我需要更進一步。 如果我有以下內容(基於上一個問題的答案)

SELECT TaskId, TaskDescription, TaskType 
FROM Tasks 
WHERE TaskType = 1 [FIRST-TABLE]

我希望能夠然后選擇

SELECT AttachmentId, TaskId, [FileName], FileLocation 
FROM TaskAttachments 
[WHERE TaskId IN FIRST-TABLE] ;

而且我需要能夠將兩個表都返回到asp.net

我可以編寫一個查詢來做到這一點:

SELECT AttachmentId, TaskId, [FileName], FileLocation 
FROM TaskAttachments 
WHERE TaskId EXISTS IN (SELECT TaskId, TaskDescription, TaskType 
                        FROM Tasks
                        WHERE TaskType = 1);

我的實際查詢需要很多連接,因此需要更長的時間,因此第二個查詢變得很長,而且看起來很復雜,需要兩次選擇相同的數據。

通過使用從第一個SELECT返回的實際數據,有沒有比這更好的方法了?

(順便說一句,請原諒任何語法錯誤。這只是為了快速說明,我的實際代碼工作正常!!)

在這種情況下,您可以使用公用表表達式:

;with cte as(SELECT TaskId, TaskDescription, TaskType FROM Tasks)
SELECT AttachmentId, TaskId, [FileName], FileLocation 
FROM TaskAttachments where TaskID in(select TaskId from cte where TaskType = 1)

編輯:

IF EXISTS(SELECT * FROM tempdb.sys.tables WHERE [name] = '#tasks') BEGIN
   DROP TABLE #tasks;
END;

--save to temp table
SELECT TaskId, TaskDescription, TaskType into #tasks FROM Tasks

--select from temp table
SELECT TaskId, TaskDescription, TaskType FROM #tasks

--select from second table using temp table
SELECT AttachmentId, TaskId, [FileName], FileLocation 
FROM TaskAttachments where TaskID in(select TaskId from #tasks where TaskType = 1)

聯接兩個表也許不是使用EXISTS子句?

SELECT ta.AttachmentId, ta.TaskId, ta.FileName, ta.FileLocation 
FROM TaskAttachments ta INNER JOIN Tasks t ON ta.TaskId = t.TaskId 
WHERE t.TaskType = 1;

這將導致查詢縮短。

SELECT AttachmentId, TaskAttachments.TaskId, [FileName], FileLocation    
  FROM TaskAttachments    
  JOIN Tasks 
    on TaskAttachments.TaskId = Tasks.TaskId    
   and Tasks.TaskType = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM