2

OracleDBの2つのテーブルに対してマイナス演算を実行したいと思います。最初のテーブルはChart_Yearで、trackPosition、trackArtist、trackName、previewLinkが含まれています。もう1つのテーブルは、trackArtist、trackName、previewLinkだけが含まれているRecommendationです。ファイナルテーブルをtrackPositionで並べ替えたいです。私のやり方はtrackArtistによる注文です:

SELECT trackartist, trackname, previewlink 
FROM 
    (
        SELECT 
            trackposition, trackartist, trackname, previewlink 
        FROM 
            chart_year 
        WHERE 
            chartsYear between 2004 and 2008 
        ORDER BY trackposition ASC
    )

MINUS 

SELECT 
    trackartist, trackname, previewlink 
FROM 
    recommendation 
WHERE 
    user = 'bla'

多分私は次のようなことをすることができます

SELECT 
    1 as trackPosition, trackartist, trackname, previewlink 
FROM 
    recommendation...

4

1 に答える 1

1

の代わりにMINUS、次を使用できますEXISTS

SELECT trackartist, trackname, previewlink
  FROM chart_year cy
 WHERE chartsYear BETWEEN 2004 AND 2008
   AND NOT EXISTS
        ( SELECT 1
            FROM recommendation r
           WHERE r.user = 'bla'
             AND r.trackartist = cy.trackartist
             AND r.trackname = cy.trackname
             AND r.previewlink = cy.previewlink
        )
 ORDER
    BY trackposition ASC
;

またはLEFT OUTER JOIN

SELECT cy.trackartist, cy.trackname, cy.previewlink
  FROM chart_year cy
  LEFT
 OUTER
  JOIN recommendation r
    ON r.user = 'bla'
   AND r.trackartist = cy.trackartist
   AND r.trackname = cy.trackname
   AND r.previewlink = cy.previewlink
 WHERE cy.chartsYear BETWEEN 2004 AND 2008
   AND r.user IS NULL -- i.e., where the join failed
 ORDER
    BY cy.trackposition ASC
;
于 2012-09-23T14:55:36.247 に答える