0

2つのテーブルがあるとしましょう:

TableA
ID,    Time,   Size

0      5:00    600
1      8:00    800
2      7:00    100
3      1:50    140
4      2:40    300 
12     3:40    300

TableB
ID,    Time,   Size

8      5:00    600
1      8:00    800
2      8:00    900
3      1:50    140
5      2:40    300 
12     3:40    300 

ここで、これら 2 つのテーブルを比較したいと思います。テーブル A と B から、ID が同じ (または ID が両方のテーブルに存在する場所) であるが、12 より小さいすべての行を指定すると、テーブル A が除外されます。ID 0, 4, 12そしてテーブルBからID 8, 5, 12

その後、3行しか残っていません。ここで、TableA の行 ID == TableB の行 ID 全体に 1 つ以上の違いがあるすべての行を追い出したいと思います。

最後に(私がそれが正しいと思うなら)出力としてあるでしょう:

ID,    Time,   Size
1      8:00    800
3      1:50    140

この解決策のために、私は確かに交差し、おそらくマイナスが必要です。最初は、この SQL ステートメントで自分のやりたいことができると思っていました。

select * from TableA where ID < 12 intersect select * from TableB where ID < 12 
minus 
select * from TableB where ID < 12;

しかし、これはうまく機能していません。交差が原因で、行全体に交差を使用しているため、IDのみに交差を使用する必要があり、IDの交差がある場合(1,2,3)、IDTableA with ID 1,2,3 マイナス TableB with ID 1,2,3を使用する必要があります。しかし、どのように?それとも何かが恋しいですか?何か案は?ありがとうございました

4

2 に答える 2

3

要件と提供したテストデータから、交差する必要はまったくありません。だけINNER JOINで十分です。

SELECT a.* 
FROM   TableA a 
       INNER JOIN TableB b ON b.ID = a.ID AND b.Time = a.Time AND b.Size = a.Size
于 2012-05-29T14:15:09.880 に答える
1
select id from TableA where ID < 12 and id in (Select id from TableB)
union 
select id from TableB where ID < 12   and id in (Select id from TableA)

また

SELECT id, 
       time, 
       size 
FROM   (SELECT * 
        FROM   tablea 
        WHERE  id < 12 
        UNION ALL
        SELECT * 
        FROM   tableb 
        WHERE  id < 12) a 
GROUP  BY id, 
          time, 
          size 
HAVING Count(*) = 2 

また

SELECT * 
FROM   tablea A 
WHERE  EXISTS (SELECT 1 
               FROM   tableb b 
               WHERE  b.id = a.id 
                      AND b.time = a.time 
                      AND b.size = a.size) 
于 2012-05-29T14:14:21.980 に答える