0

我有一张名为 FEATURING 的表:

* Artist_1,  join_phrase,  Artist_2 *

  Shakira       feat.      Rihanna  
  Eminem        feat.      Rihanna  
  Sia           feat.      Eminem  
  SeanPaul      feat.      Sia   
  Queen         feat.      DavidBowie
  LadyGaga      feat.      Beyonce   
  LadyGaga      feat.      Eminem   

我需要指定一个 SQL 查询,该查询包含从未相互合作但与另一位艺术家共同合作的艺术家的对( Artist_1名称,Artist_2 的名称


例如:X feat Y, Z feat Y ---> (X, Z) 是解


结果将是:

* Artist_1,  Artist_2 *

  Shakira    Eminem  
  Eminem     SeanPaul  
  Beyonce    Eminem  
  LadyGaga   Rihanna   
  Sia        Rihanna 
  Sia        LadyGaga

我该如何解决?非常感谢!

4

2 回答 2

0

http://sqlfiddle.com/#!6/5ee966/1

Select 
  Case When t1.Artist_1 < t2.Artist_1  Then t1.Artist_1 Else t2.Artist_1 End Artist_1,
  Case When t1.Artist_1 < t2.Artist_1  Then t2.Artist_1 Else t1.Artist_1 End Artist_2
From FEATURING t1 Join FEATURING t2 On t1.Artist_2 = t2.Artist_2 and t1.Artist_1 <> t2.Artist_1

Union

Select 
  Case When t1.Artist_1 < t2.Artist_2  Then t1.Artist_1 Else t2.Artist_2 End Artist_1,
  Case When t1.Artist_1 < t2.Artist_2  Then t2.Artist_2 Else t1.Artist_1 End Artist_2
From FEATURING t1 Join FEATURING t2 On t1.Artist_2 = t2.Artist_1 

Union

Select 
  Case When t1.Artist_2 < t2.Artist_2  Then t1.Artist_2 Else t2.Artist_2 End Artist_1,
  Case When t1.Artist_2 < t2.Artist_2  Then t2.Artist_2 Else t1.Artist_2 End Artist_2
From FEATURING t1 Join FEATURING t2 On t1.Artist_1 = t2.Artist_1 and t1.Artist_2 <> t2.Artist_2

按名称排序以删除重复项。

于 2017-07-16T11:14:35.483 回答
0

也许我是这样解决的,但我不确定,因为数据库的数据太多了:

SELECT DISTINCT f1.artist_1, f2.artist_1
FROM featuring f1 join featuring f2 on (f1.artist_2 = f2.artist_2)
WHERE f1.art1 < f2.art1 
      and (f1.artist_1, f2.artist_1) not in (SELECT f3.art1, f3.art2
                                             FROM featuring f3
                                             WHERE f3.artist_1 < f3.artist_2
                                            )
order by f1.art1

嵌套的 SELECT 表示 Artist_1 与 Artist_2 不同的艺术家的合作。

主 SELECT 从 F1 获取 Artist_1,从 F2 获取 Artist_1。

F1 和 F2 已加入 Artist_1 和 Artist_2 的共同艺术家


于 2017-07-16T11:14:57.090 回答