2012-09-23 38 views
1

我想對Oracle數據庫中的兩個表執行減號操作。第一個表是Chart_Year,它具有trackPosition,trackArtist,trackName,previewLink。另一張表是建議,它只跟蹤藝術家,trackName,previewLink。我想要通過trackPosition排序最終表。我這樣做的方式是爲了通過trackArtist:在Oracle數據庫中減號和排序db

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... 

回答

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 
; 
+0

我今天休息後,我會試試這個:P ...看起來非常有前途,謝謝! :) – gausss

+0

@ user858749:不客氣! – ruakh