1

2 つのテーブルがあり、それぞれに次のフィールドがあります: IDnumberSectionNumberDate。2 つの表には重複する情報があります。

オーバーラップしていない行のみを選択するにはどうすればよいですか (つまり、1 つのテーブルではなく、他のテーブルでは)。

4

4 に答える 4

1

どの DBMS ですか?

SQL Serverなら、タイトルに書いた通りのものがほとんど...

SELECT *
FROM Table1
WHERE IDnumber NOT IN (SELECT IDnumber FROM Table2)
于 2012-08-02T21:03:03.903 に答える
1

節でa を使用できNOT INます。WHERE

SELECT IDnumber, SectionNumber, Date
FROM table1
WHERE IDnumber NOT IN (SELECT IDnumber FROM table2)

またNOT EXISTS

SELECT IDnumber, SectionNumber, Date
FROM table1 t1
WHERE NOT EXISTS (SELECT IDnumber FROM table2 t2 WHERE t1.IDnumber = t2.IDnumber)
于 2012-08-02T21:02:41.777 に答える
0

複数の列を比較する場合は、外部結合が必要です。

select table1.*
from table1 left outer join
     table2
     on table1.id = table2.id and
        table1.SectionNumber = table2.SectionNumber and
        table1.date = table2.date
where table2.id is null

テーブル間に多くの一致がある場合、結合は非効率になる可能性があります。これら 3 つのフィールドのみが必要であると仮定すると、結合を回避するトリックを使用できます。

select id, SectionNumber, date
from ((select 0 as IsTable2, id, SectionNumber, date
       from table1
      ) union all
      (select 1 as IsTable2, id, SectionNumber, date
       from table2
      )
     ) t
 group by id, SectionNumber, date
 having max(isTable2) = 0
于 2012-08-02T21:29:05.593 に答える
0
SELECT *
FROM Table1 t1 left join Table2 t2
on t1.id=t2.id
where t2.id is null
于 2012-08-03T05:01:17.387 に答える