首页 文章

错误512:子查询返回的值超过1

提问于
浏览
-1

我的 SQL 是:

SELECT DB1.IdUtente
        ,DB2.Gruppo
        ,DB1.Username
        ,DB1.Psw

        ,CASE WHEN DB1.RagioneSociale IS NOT NULL
                    AND DB1.RagioneSociale <> ''
            THEN DB1.RagioneSociale
            ELSE DB1.Cognome + ' ' + DB1.Nome
            END AS Nominativo

        ,DB1.Indirizzo + ' - ' + DB1.Cap+ ' ' + DB1.Citta + '(' + DB1.Provincia + ')' AS IndirizzoCompleto
        ,DB1.Telefono + ' ' + DB1.Email AS Contatti

        ,(SELECT DISTINCT COUNT (*)
            FROM DB3
            WHERE DB3.IdAttivazione = DB1.IdUtente
            ) AS NumeroAccessi

        ,(SELECT DB4.NumTarga
            FROM DB4
            WHERE DB4.IdUtente = DB1.IdUtente
            ) AS NumeroTarghe

        ,DB1.DataRegistrazione
        ,DB1.DataScadenza
        ,DB1.Attivo 
FROM DB1
    INNER JOIN DB2
        ON DB1.IdGruppo = DB2.IdGruppo 
WHERE DB1.Demo = 0
ORDER BY DB1.RagioneSociale

为什么我从sql server收到此错误?

错误512:子查询返回的值超过1 . 当子查询遵循=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做 .

我错了什么?

抱歉英文不好 .

谢谢你的帮助

亲切的问候

M.W.

1 回答

  • 1

    即使您的代码没有问题,您的子选择也应该被重写为 join .

    如果你这样做并且实际上在你的整个数据集中做了一些测试,你会看到你的复制来自哪里,这会给你多行并导致你看到的错误:

    SELECT DB1.IdUtente
            ,DB2.Gruppo
            ,DB1.Username
            ,DB1.Psw
    
            ,CASE WHEN DB1.RagioneSociale IS NOT NULL
                        AND DB1.RagioneSociale <> ''
                THEN DB1.RagioneSociale
                ELSE DB1.Cognome + ' ' + DB1.Nome
                END AS Nominativo
    
            ,DB1.Indirizzo + ' - ' + DB1.Cap+ ' ' + DB1.Citta + '(' + DB1.Provincia + ')' AS IndirizzoCompleto
            ,DB1.Telefono + ' ' + DB1.Email AS Contatti
    
            ,DB3.NumeroAccessi
    
            -- Somewhere in your data you will have at least two rows with different values in this field.
            ,DB4.NumTarga AS NumeroTarghe
    
            ,DB1.DataRegistrazione
            ,DB1.DataScadenza
            ,DB1.Attivo 
    FROM DB1
        INNER JOIN DB2
            ON DB1.IdGruppo = DB2.IdGruppo
        INNER JOIN (SELECT IdAttivazione
                        ,COUNT(*) as NumeroAccessi
                    FROM DB3
                    GROUP BY IdAttivazione
                    ) DB3
            ON DB3.IdAttivazione = DB1.IdUtente
        INNER JOIN DB4
            ON DB4.IdUtente = DB1.IdUtente
    WHERE DB1.Demo = 0
    ORDER BY DB1.RagioneSociale
    

相关问题