sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan finder man rækker, der er dubletter med en nøgle, men ikke dubletter i alle kolonner?

Du kan gøre det ved at slutte bordet til sig selv og sige, at D'erne alle er lige, og at mindst et af C'erne ikke er ens.

CREATE TABLE #Source (
    D1 VARCHAR(2),
    D2 VARCHAR(2),
    D3 VARCHAR(2),
    C4 VARCHAR(2),
    C5 VARCHAR(2),
    C6 VARCHAR(2) );

INSERT INTO #Source VALUES ('A', 'B', 'C', 'X1', 'X2', 'X3');
INSERT INTO #Source VALUES ('A', 'B', 'C', 'X1', 'X2', 'X4');
INSERT INTO #Source VALUES ('A', 'B', 'D', 'X1', 'X2', 'X3');
INSERT INTO #Source VALUES ('A', 'B', 'D', 'X1', 'X2', 'X3');

SELECT S1.D1, S1.D2, S1.D3, S1.C4 C4_1, S2.C4 C4_2, S1.C5 C5_1, S2.C5 C5_2, S1.C6 C6_1, S2.C6 C6_2
FROM
    #Source S1
            INNER JOIN
    #Source S2
            ON
        (       S1.D1 = S2.D1 
            AND S1.D2 = S2.D2
            AND S1.D3 = S2.D3
            AND (   S1.C4 <> S2.C4
                 OR S1.C5 <> S2.C5
                 OR S1.C6 <> S2.C6
                 )
        );

DROP TABLE #Source;
 

Giver følgende resultater:

D1 D2 D3 C4_1 C4_2 C5_1 C5_2 C6_1 C6_2 ---- ---- ---- ---- ---- ---- ---- ---- ---- A B C X1 X1 X2 X2 X4 X3 A B C X1 X1 X2 X2 X3 X4

Bemærk også, at dette er kompatibelt med MS SQL 2000, som du senere har angivet er påkrævet i Sådan konverteres en SQL-forespørgsel ved hjælp af almindelige tabeludtryk til One Without (til SQL Server 2000) .



  1. Dækker hex til billede i PHP?

  2. Hvorfor mener PostgreSQL serialiserbar transaktion, at dette er en konflikt?

  3. SQL sammenligningsoperatør

  4. Hvor lang er SHA256-hash?