2011-01-11 30 views
1

から明確な/組合を選択するために:私は一度、すべてのid-番号の一覧を表示しようとしているどのように私は2つのテーブル持っている二つのテーブル

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 

を、どこそのidのいずれかのエントリには、インデックス番号06または07ではありません。例えば、この場合、結果としてid 2しか得られません。表1私は日付検索に使用する必要があります。

答えて

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

名目上は、表1には、指定した条件指定した軽微であります。

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; 
:、

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') 
        ); 

しかしあなただけのも、その後、表1にIDに一致するエントリが必要な場合は

インデックスが実際に数値の列である場合、先行ゼロが重要でないため、インデックスは文字列 '06'、 '07'としてエンコードされていることに注意してください。 Table.Index列が実際には数値型の場合は、引用符と先頭のゼロを削除します。それはあなたに(少し)良いパフォーマンスを与えるかもしれません。

1

通常、実際のテーブル定義/挿入ステートメントを投稿することで、人々が解決策を書いてテストすることができます。

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 

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

このSQL Serverで2008

サンプルテーブルをテストされています。ここでは下のサンプル表を使用して、私の試みは、です

関連する問題