2014-12-06 81 views
1

我上的Oracle 11g數據庫工作。我有貨幣表,我在2013年和2014年有182條記錄,我有81條記錄。我從2013年缺少/差異的記錄得到的差值101分的記錄,我必須插入到2014年減查詢/操作員在甲骨文

我不知道我的語法是不正確或任何其他方法產生的不同的查詢。

SELECT 
a.CCYCD, 
a.YEARNR 
FROM CCYEXC a 
WHERE a.YEARNR = 2013 

minus 

SELECT 
a.CCYCD, 
a.YEARNR 
FROM CCYEXC a 
WHERE a.YEARNR = 2014; 
+0

什麼YEARNR和YEAR_NR之間的區別? – Multisync 2014-12-06 21:02:02

+0

執行查詢時發生了什麼?它沒有給你想要的輸出? – 2014-12-06 21:32:48

+0

@Multisync,YEARNR和YEAR_NR是我的錯誤。它必須是YEARNR。 – wasabi 2014-12-06 21:39:25

回答

0
SELECT CCYCD 
    , YEARNR 
    FROM CCYEXC 
WHERE YEAR_NR = 2014 
    AND CCYCD,YEARNR NOT IN 
      (
     SELECT CCYCD 
      , YEARNR 
     FROM CCYEXC 
     WHERE YEAR_NR = 2013 
      ); 
+0

我想你忘記 – Multisync 2014-12-06 21:07:16

+0

謝謝你的幫助!括號 – wasabi 2014-12-06 21:34:49

+0

對不起,語法不起作用。作爲無效的關係運算符出錯。 – wasabi 2014-12-06 21:38:36

0

你的MINUS用法是正確的。當你想要SET差異時,MINUS是正確的路線。請注意,某些其他數據庫使用EXCEPT關鍵字來執行此操作。

下面一組操作都可用。

  • UNION(ALL)
  • INTERSECT
  • 減號/ EXCEPT
+0

你是什麼意思,「其他」數據庫?OP說:oracle11g – tvCa 2014-12-06 21:06:05

+0

MINUS的使用可能不正確,因爲它也消除了結果集中的dublicates – Multisync 2014-12-06 21:09:25

+0

它應該是這樣的。這是一個SET操作。一個SET不保存重複 – 2014-12-06 21:15:46

0

你只需要擁有CCYCD列在SELECT列表中MINUS查詢。現在,插入該結果到表中的2014年,只寫了我SERT的聲明是這樣,

INSERT INTO ccyexc SELECT ccycd, 2014 as "yearnr" FROM( <your MINUS query> );

0

EXISTS通常更快:

SELECT a.CCYCD, a.YEARNR 
FROM CCYEXC a 
WHERE a.YEARNR = 2013 
    and not exists (select 1 from CCYEXC b where b.YEARNR = 2014 and b.CCYCD = a.CCYCD); 

另一種選擇:

SELECT a.CCYCD, a.YEARNR 
FROM CCYEXC a 
WHERE a.YEARNR = 2013 
    and a.CCYCD not in (select distinct CCYCD from CCYEXC b where b.YEARNR = 2014); 

您也可以使用LEFT JOIN

減號不起作用,因爲這兩套(子查詢)有不同的YEARNR(不相交)

+0

不,MINUS將工作。不要將年份列放在選擇列表中,因爲在不同年份之間不會相交是沒有意義的。看看我的答案。 – 2014-12-06 22:01:32

+0

@Lalit Kumar從問題減去不起作用。當然,在不同的情況下,它可以被使用。我剛纔指出了問題所在 – Multisync 2014-12-06 22:07:52

0

寫這個較短的方法是使用聚合:

SELECT c.CCYCD, 
FROM CCYEXC c 
GROUP BY c.CCYCD 
HAVING SUM(CASE WHEN c.YEARNR = 2013 THEN 1 ELSE 0 END) > 0 AND 
     SUM(CASE WHEN c.YEARNR = 2014 THEN 1 ELSE 0 END) = 0; 

或者,如其他人所建議的,NOT EXISTSNOT IN子句。