2011-01-11 4 views
1

J'ai deux tables:Comment choisir distincte/union de deux tables

Table 1 

    id date 
    1 01-JAN-2011 
    2 01-JAN-2011  
    3 01-JAN-2011 

Table 2 

    id index 
    1  01 
    1  05 
    1  06 
    2  01 
    2  02 
    3  01 
    3  07 

Je suis en train de lister tous les numéros d'identification une fois, où est pas d'indice 06 ou 07 dans une entrée pour cet ID . Donc, dans ce cas, par exemple, je devrais obtenir seulement ID 2 en conséquence. Tableau 1 Je dois utiliser pour la recherche par date.

Répondre

3
SELECT DISTINCT id 
    FROM table2 t 
WHERE NOT EXISTS (SELECT NULL 
        FROM table2 
        WHERE t.id = id 
         AND index IN ('06', '07')) 
0

Nominalement, le tableau 1 est sans importance, compte tenu des conditions que vous spécifiez:

SELECT DISTINCT t2.id 
    FROM Table2 AS t2 
WHERE t2.id NOT IN (SELECT DISTINCT t2a.id 
         FROM Tble2 AS t2a 
         WHERE t2a.index IN('06', '07') 
        ); 

Cependant, si vous ne souhaitez que les entrées qui correspondent également un identifiant dans le tableau 1, puis:

SELECT DISTINCT t1.id 
    FROM Table1 AS t1 
    JOIN (SELECT DISTINCT t2.id 
      FROM Table2 AS t2 
     WHERE t2.id NOT IN (SELECT DISTINCT t2a.id 
           FROM Tble2 AS t2a 
           WHERE t2a.index IN('06', '07') 
          ) 
     ) AS t3 
    ON t1.id = t3.id; 

Notez que j'ai codé l'index comme une chaîne de caractères '06', '07' parce que le zéro de début est sans importance si l'index est en fait une colonne numérique. Si votre colonne Table.Index est en fait un type numérique, supprimez les guillemets et les zéros en tête; il pourrait même donner (légèrement) de meilleures performances pour vous.

1

Il est généralement préférable de publier des définitions de tables/instructions d'insertion réelles, afin que les personnes puissent écrire et tester leurs solutions par rapport à elles. Voici ma tentative, en utilisant des exemples de tableaux ci-dessous:

select ID from T2 
except 
select ID from T2 where Indx in ('06','07') 

Cela a été testé dans SQL Server 2008.

tables exemples:

create table T2 (
    ID int not null, 
    Indx char(2) not null 
) 
go 
insert into T2(ID,Indx) 
select 1,'01' union all 
select 1,'05' union all 
select 1,'06' union all 
select 2,'01' union all 
select 2,'02' union all 
select 3,'01' union all 
select 3,'07' 
go 
Questions connexes