Как запросить все значения, которые имеют то же значение в другом поле, что и значение в этой строке?

#sql #db2

#sql #db2

Вопрос:

Извините за неуклюже сформулированный заголовок; я не мог придумать другого способа описать эту проблему!

У меня есть таблица (назовем ее table1), которая выглядит примерно так:

 OFFER | DEAL
------------
 A    | 1
 B    | 1
 C    | 1
 D    | 2
 E    | 2
 F    | 3
 

Я хочу написать запрос, в котором перечислены все предложения и их номер сделки, а также дополнительное поле, показывающее любые предложения, которые имеют этот номер сделки.

Другими словами, результаты должны выглядеть следующим образом:

 OFFER | DEAL | SHARED
---------------------
 A    | 1    | B
 A    | 1    | C
 B    | 1    | A
 B    | 1    | C
 C    | 1    | A
 C    | 1    | B
 D    | 2    | E
 E    | 2    | D
 

Кто-нибудь знает, как это сделать, пожалуйста?

Ответ №1:

Вы можете использовать самосоединение:

 select t1.*, t2.offer
from t t1 join
     t t2
     on t1.deal = t2.deal and t1.offer <> t2.offer;