Transact SQL JOIN

时间:2013-05-23 10:16:32

标签: sql sql-server tsql join

我有以下查询:

SELECT MS.idReg, MS.dsMotivo, A.contrato FROM MS
INNER JOIN S 
ON S.motivoSiniestro = MS.idReg
INNER JOIN C
ON C.n__contrat = S.n__contrat
INNER JOIN A
ON A.n__article = C.n__article

表MS只有12条记录,我需要的记录和其他记录更多的记录。 我的问题是我只想要来自MS及其contrato专栏的12条记录,但我得到的更多。尝试了INNER,OUTER,LEFT和RIGHT联接的多种组合。有什么帮助吗?

2 个答案:

答案 0 :(得分:2)

您获得的记录太多,因为MS表中的每一行都有几个A.contrato值。 Sql server不知道要采用的所有A.contrato值中的哪一个,所以它返回所有这些值。首先,你需要决定你想要哪一个。

如果有,你可以简单地写下你的查询:

SELECT MS.idReg, MS.dsMotivo, MAX(A.contrato) 
FROM MS
    INNER JOIN S 
        ON S.motivoSiniestro = MS.idReg
    INNER JOIN C
        ON C.n__contrat = S.n__contrat
    INNER JOIN A
        ON A.n__article = C.n__article
GROUP BY  MS.idReg, MS.dsMotivo

答案 1 :(得分:1)

试试这个 -

SELECT MS.idReg, MS.dsMotivo, A.contrato 
FROM dbo.MS
OUTER APPLY (
    SELECT TOP 1 A.contrato
    FROM dbo.S
    JOIN dbo.C ON C.n__contrat = S.n__contrat
    JOIN dbo.A ON A.n__article = C.n__article 
    WHERE S.motivoSiniestro = MS.idReg
) s