0

列 id、artist_id、web を持つテーブルがあります。次のように Web の複製を表示できるクエリを見つけました。

SELECT DISTINCT b.artist_id AS artist1, b.web AS web1, a.artist_id AS artist2, a.web AS web2 FROM artist_webs a INNER JOIN artist_webs b ON b.web=a.web AND b.web!='NULL' AND b.artist_id!=a.artist_id

したがって、同じ Web アドレスを持つさまざまなアーティストが表示されます。ただし、唯一の問題は、本質的に同じエントリが 2 回以上表示されることです。たとえば、結果は次のようになります。

Row 1
artist1: 21399
artist2: 1036

Row 2
artist1: 1036
artist2: 21399

もちろん、データベースの場合、これらは異なるエントリですが、同じ Web アドレスで同じアーティスト ID を参照しているため、人間にはそれらが同じであることは明らかです。最初の行で十分です。

したがって、実際に必要なのは、上記のクエリを変更して、id が表示される順序に関係なく個別の行を表示することだけです。

ありがとう!

4

2 に答える 2

2

同じテーブルに参加するときは、常に次のようなものを追加します

b.artist_id < a.artist_id

あなたの代わりに

b.artist_id!=a.artist_id

そうすれば、それらは「同じではない」だけでなく、「逆の」ソリューションをスキップできます。

于 2012-08-06T09:44:51.973 に答える
1

これを試して:

SELECT DISTINCT b.artist_id AS artist1, b.web AS web1, 
                a.artist_id AS artist2, a.web AS web2 
FROM artist_webs a 
     INNER JOIN artist_webs b 
         ON b.web = a.web AND  
            b.artist_id < a.artist_id;
于 2012-08-06T09:45:53.267 に答える