2

我有一个看起来像这样的查询:

SELECT * 
FROM dbo.document_library_file_attributes 
WHERE my_file_id=
(SELECT my_file_id 
 FROM dbo.document_library_file_attributes 
 WHERE attribute_name='Directory/Key' AND attribute_value LIKE @directory+'%')

我希望子查询能够返回多个结果,这意味着my_file_id可以等于“directoryA”、“directoryB”,并且我想要所有这些的结果。我该怎么做?

4

2 回答 2

7

使用IN而不是=结果集:

SELECT * 
FROM dbo.document_library_file_attributes 
WHERE my_file_id IN
(SELECT my_file_id 
 FROM dbo.document_library_file_attributes 
 WHERE attribute_name='Directory/Key' AND attribute_value LIKE @directory+'%')

它:

确定指定值是否与子查询或列表中的任何值匹配。

于 2013-02-04T19:13:18.400 回答
3

我认为 aJOIN是表达你想要做的事情的更好方式:

SELECT DISTINCT lfa2.* 
FROM 
    dbo.document_library_file_attributes lfa
    JOIN dbo.document_library_file_attributes lfa2
        ON lfa.my_file_id = lfa2.my_file_id 
WHERE 
    lfa.attribute_name='Directory/Key' 
    AND lfa.attribute_value LIKE @directory+'%'
于 2013-02-04T19:15:56.550 回答