我有一个表状态,其中包含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)
虽然很多人会问这个问题,但我无法从我的搜索中找到这个语法。
请帮助:)
答案 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
值,我就把它作为一个参数。
这样做的好处就是只做一个子查询。