具有多个结果的子查询,SQL Server

时间:2013-02-04 19:12:20

标签: sql sql-server tsql

我有一个如下所示的查询:

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',我想要所有这些的结果。我该怎么做?

2 个答案:

答案 0 :(得分:5)

对结果集使用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+'%')

有:

  

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

答案 1 :(得分:3)

我认为JOIN是表达您要做的事情的更好方式:

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+'%'