внутреннее соединение одной таблицы и предотвращение дублирования? - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть таблица с именем

торговля со следующим столбцом (удалено много избыточных данных)

trade_id, код покупателя_компании, код_продавца_продавца, номер_телеграфного номера.

Я намереваюсь запросить всю сделку, где есть одна покупка_компани_кода = продавец_компания_кода другой сделки и продавец_компани_код = код покупателя_покупки другого покупателя

Я пытался с запросом, который приведен на скриншоте ниже

select * from trade tradetable1 inner join trade tradetable2
 on tradetable1.seller_company_code=tradetable2.buyer_company_code and tradetable1.buyer_company_code=tradetable2.seller_company_code
    and tradetable1.legacy_trade_number<tradetable2.legacy_trade_number

enter image description here

В настоящее время он дает мне следующее (legacy_trade_number из одной сделки) и (legacy_trade_numbe из другой сделки) с дубликатами (из-за декартового произведения)

5548 5554
5548 5555
5548 5556
5549 5554
5549 5555
5549 5556
5550 5554
5550 5555
5550 5556

но я требую, чтобы оно было следующим

5548 5554
5549 5555
5550 5556

Где два столбца не имеют повторяющихся значений. Любое предложение / подсказка будет полезна! спасибо

1 Ответ

0 голосов
/ 14 ноября 2018

если вы не хотите дублировать результат для столбца legacy_trade_number, тогда вместо select * вы должны выбрать только те столбцы, которые вам действительно нужны

select distinct tradetable1.legacy_trade_number from (
    select * from trade 
) tradetable1 
inner join ( 
select * 
from trade ) tradetable2 on tradetable1.seller_company_code=tradetable2.buyer_company_code 
    and tradetable1.buyer_company_code=tradetable2.seller_company_code
    and tradetable1.legacy_trade_number<tradetable2.legacy_trade_number

любым способом, чтобы получить результат простым способом, используя

select disticnt t1.legacy_trade_number 
from  trade  t1 
inner join trade t2 on on t1.seller_company_code=t2.buyer_company_code 
    and t1.buyer_company_code=t2.seller_company_code
    and t1.legacy_trade_number<t2.legacy_trade_number

Дублирование оценивается на уровне строки, поэтому ... если вам нужны другие столбцы, вы должны выбрать, какое значение вы хотите, и использовать функцию агрегации для уменьшения неиспользуемых значений

например: использование функции агрегирования какмин () вы могли бы

select t1.legacy_trade_number, min(t1.col1), min(t2.coln)
from  trade  t1 
inner join trade t2 on on t1.seller_company_code=t2.buyer_company_code 
    and t1.buyer_company_code=t2.seller_company_code
    and t1.legacy_trade_number<t2.legacy_trade_number
  group by t1.legacy_trade_number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...