T-SQL从一个表中选择另一个表中id的列

时间:2015-06-19 14:47:19

标签: asp.net sql-server tsql

我回过头来问过这个问题:Adding attachments to taks records in T_SQL 并得到了我的问题的完美答案。

但是我需要更进一步。如果我有以下内容(基于上一个问题的答案)

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返回的实际数据是否有更好的方法?

(顺便说一句,请原谅任何语法错误。这只是为了快速说明,我的实际代码工作正常!!)

3 个答案:

答案 0 :(得分:0)

在这种情况下,您可以使用公用表表达式:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^page1/page2/?$ page2.php [NC,L]
RewriteRule ^page1/?$ page1.php [NC,L]

修改

;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)

答案 1 :(得分:0)

加入这两个表可能不是使用EXISTS子句吗?

   gmp_fprintf (FILE *fp, const char *fmt, ...)
   gmp_fscanf (FILE *fp, const char *fmt, ...)

这会导致查询更短。

答案 2 :(得分:0)

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