2つの表があり、同じ行をフェッチする必要はありません。どのようにクエリを書くか?SQL照会で等しくない行を取得する方法
たとえば、table a
には10行が含まれ、table b
には10行が含まれます。 aとbで 等しい行私は(ないBテーブルで)等しくない行を取りたい5.
ある
Bテーブルに等しくないテーブル値を取得するには?
結果は、構文はINTERSECTに似て
EXCEPT 5のレコード
2つの表があり、同じ行をフェッチする必要はありません。どのようにクエリを書くか?SQL照会で等しくない行を取得する方法
たとえば、table a
には10行が含まれ、table b
には10行が含まれます。 aとbで 等しい行私は(ないBテーブルで)等しくない行を取りたい5.
ある
Bテーブルに等しくないテーブル値を取得するには?
結果は、構文はINTERSECTに似て
EXCEPT 5のレコード
使用する必要があります。
select * from A minus select * from B
をAとBではなく、両方の行を取るために:AでなくBの行を取るために https://www.tutorialspoint.com/sql/sql-intersect-clause.htm
交差は等価です – user2587029
(select * from A union select * from B) minus (select * from A intersect select * from B)
マイナスは正解を与えていません。両方のテーブルに等しくない値を与えます。私はテーブル値だけを必要とします – user2587029
この問題はずっと前に解決されています。最適解は各テーブルを1回だけ読み込みます(各テーブルを2回読み込み、追加の作業を行う「対称差分」解法とは異なります)。
select 'A' as source, col1, col2, ...
from table_A
union all
select 'B' as source, col1, col2, ...
from table_B
group by col1, col2, ...
having count(*) = 1
;
行は、両方のテーブルに存在する場合
、次いでカウントこれは、いずれかのテーブルに重複する行が存在しない前提2.あろう。重複する行がある場合は、HAVING条件を変更できます。たとえば、
having count(case when source = 'A' then 1 end) = 0
or count(case when source = 'B' then 1 end) = 0
マイナスが正解を示していません。両方のテーブルに等しくない値を与えます。私はテーブルの値だけを持っています – user2587029