[英]T-SQL: Select foreign key from one table and find corresponding rows in another
[英]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.