sql >> Database >  >> RDS >> Sqlserver

Hoe vind je rijen die gedupliceerd zijn door een sleutel, maar geen duplicaten in alle kolommen?

Je kunt het doen door de tafel op zichzelf te voegen en te zeggen dat de D's allemaal gelijk zijn en dat ten minste één van de C's niet gelijk is.

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;

Geeft de volgende resultaten:

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

Houd er ook rekening mee dat dit compatibel is met MS SQL 2000, zoals u later hebt aangegeven dat het vereist is in Een SQL-query converteren met Common Table Expressions naar One Without (voor SQL Server 2000) .



  1. inner join met leeg resultaat uit rechtertabel

  2. Sphinx vs. MySql - Doorzoek de lijst met vrienden (efficiëntie/snelheid)

  3. SQL Server - vergrendelt [SELECT] [UPDATE]?

  4. Gegevens afgekapt voor kolom 'profile_pic' op rij 1 im mysql