-1

我有以下查询:

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 的 12 条记录及其对比列,但我得到的更多。尝试了许多 INNER、OUTER、LEFT 和 RIGHT 连接的组合。有什么帮助吗?

4

2 回答 2

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
于 2013-05-23T12:37:51.630 回答
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
于 2013-05-23T10:18:51.327 回答