0

Oracle SQL: 重複を見つけて削除する方法

Oracle へのアクセスは読み取り専用です (SELECT コマンドのみを使用できます)。

ロジック: 2 人のユーザー 'A' と 'B' が同じ会社名と名を持っています

抽出する列:

ID of A
ID of B
Company Name of A
Company Name of B
First Name of A
First Name of B

以下のクエリを使用しています:

select a.id, b.id, a.name, b.name, a.company, b.company from
(select id, company, name where country = 'USA') a,
(select id, company, name where country = 'UK') b
where a.id <> b.id
and lower(a.company) = lower(b.company)
and a.username = b.username

ここでは、各行を 2 回取得しています (下の表を参照してください)。

A_ID .... B_ID .... A_NAME ........... B_NAME .... A_COMPANY ..... ..... B_COMPANY

3592382 .... 1977967 .... ピーター ................ ピーター .... ABC .... ................... ABC

1977967 .... 3592382 .... ピーター ................ ピーター ................. ABC .... ................... ABC

5949363 .... 5941818 .... ジョセフ .... ジョセフ .... XYZ ........... .........XYZ

5941818 .... 5949363 .... ジョセフ .... ジョセフ .... XYZ .... .........XYZ

4

2 に答える 2

0

クエリにはいくつかの問題があります。

1) そうすればselect val1,val2 from a, bcross-join結果が得られるでしょう。

from2) 別名テーブルには句がありません。

あなたはselectアクセスしかないと言います。selectしたがって、重複しない値のみを使用できます。

select distinct a.id, b.id, a.name, b.name, a.company, b.company 
from
(select id, company, name from tablename where country = 'USA') a
join
(select id, company, name from tablename where country = 'UK') b
on a.id = b.id and lower(a.company) = lower(b.company) and a.username = b.username
于 2015-08-31T15:48:55.920 に答える
0

サブクエリでテーブル名を忘れました。また、パフォーマンスが低下し、貴重なデータが追加されないため、両方の値が同じになる場合 (これが条件です)、a.col と b.col を取得しないことをお勧めします。

SELECT a.id, b.id, a.name, a.company
FROM tablename a
JOIN tablename b
    ON (a.name == b.name AND a.company == b.company AND a.username == b.username)
WHERE a.country = 'USA'
    AND b.country = 'UK'
于 2015-08-31T16:01:34.137 に答える