WHERE子句中的SQL Server SELECT子句

时间:2014-12-18 17:00:49

标签: sql-server sql-server-2008

我有一个表状态,其中包含recid,instituitionid,filename,status等。

recid是主键,并且是唯一的。

我想要一个查询,其中从具有特定instituitionid和文件名的表中选择所有行。问题是我只有recid作为输入& 2个参数值将与我所拥有的recid的值相同。

这就像是

SELECT * FROM Status 
WHERE instituitionid = (SELECT instituitionid FROM Status WHERE recid = recid) 
AND filename = (SELECT filename FROM Status WHERE recid = recid)

虽然很多人会问这个问题,但我无法从我的搜索中找到这个语法。

请帮助:)

3 个答案:

答案 0 :(得分:4)

你很亲密!试试这个:

SELECT *
FROM STATUS
WHERE instituitionid IN (
        SELECT instituitionid
        FROM STATUS
        WHERE recid = recid
        )
    AND filename IN (
        SELECT filename
        FROM STATUS
        WHERE recid = recid
        )

答案 1 :(得分:2)

这会给你所有这些,包括b.recid = @recid

SELECT b.* 
FROM Status AS a
INNER JOIN Status AS b
ON a.instituitionid = b.instituitionid 
AND a.filename = b.filename
WHERE a.recid = @recid

答案 2 :(得分:1)

有很多方法可以做到这一点:这是另一种方法:

 SELECT * 
 FROM   Status s
 WHERE  EXISTS (
     SELECT  1 
     FROM    Status s2
     WHERE   s.institutionid = s2.institutionid
        AND  s.filename = s2.filename
        AND  s2.recid = @recid

 )

既然你说你有recid值,我就把它作为一个参数。

这样做的好处就是只做一个子查询。