如何限制连接中嵌套选择中考虑的记录?

时间:2015-09-07 20:54:48

标签: sql sql-server

很想知道是否有办法编写以下T-SQL语句(这一个错误与嵌套选择中的TableA无法绑定。)删除错误行似乎认为TableB中的所有记录都会执行连接。 / p>

select *
from TableA A
    join (
        select TableAid, TableBinfo
        from TableB
        where TableB.TableAid = A.TableAid -- error line
        group by TableAid, TableBinfo
    ) B on
        A.TableAid = B.TableAid
where A.TableAid = 123

以下SQL是我能想到的最好的吗?

我真的想将不同的比较限制在一个表中的一列而不是我选择的所有列。我无法控制数据库,除了主键外,它没有任何索引。

select A.TableAid, B.TableBinfo
from TableA A
    join TableB B on
        A.TableAid = B.TableAid
where A.TableAid = 123
group by A.TableAid, B.TableBinfo

1 个答案:

答案 0 :(得分:3)

您的第一个示例看起来像是在尝试对相关子查询执行APPLY:

SELECT *
    FROM TableA a
    CROSS APPLY
    (
        SELECT t.TableBInfo
            FROM TableB t
            WHERE a.TableAId = b.TableBId
            GROUP BY b.TableBInfo
    ) b
    WHERE a.TableAId = 123