2014-07-22 64 views
0

我一直在試圖寫一個MySQL查詢來處理差異報告Approved ='是'Approved ='no' rows in a single table。 - 我嘗試了一些方法(包括自連接和創建/查詢臨時表),無論我嘗試什麼,最終都會輸出錯誤的數據集。從一個表中選擇差異報告MySQL

SELECT DISTINCT a.* 
    FROM myTable a 
    JOIN myTable b 
    ON a.apples = b.apples 
    AND a.bananas = b.bananas 
    AND a.oranges = b.oranges 
    WHERE (
     a.Approved = 'no' 
     AND b.Approved = 'yes' 
    ) AND ( 
     a.diffVal1 <> b.diffVal1 
     OR a.diffVal2 <> b.diffVal2 
     OR a.diffVal3 <> b.diffVal3 
    ) 

在這種情況下,我想比較具有相同的蘋果,香蕉,桔子行......而且,如果任何diffVal的比較行之間是不一樣的,我想將該行包含在正在輸出的集合中。我不知道爲什麼這不起作用,但每次運行時都會包含所有「否」條目,無論是否存在具有相同蘋果,香蕉和橙子的「是」條目diffVals。 (幾乎就像它忽略了diffVal部分一起)

我確定這是愚蠢的,我忽略了,但如果你有任何建議,我將不勝感激他們。

已填充表


id apples bananas oranges diffVal1 diffVal2 diffVal3 Approved 
    1 red  yellow orange a   b   c  yes 
    2 red  yellow orange a   b   c  yes 
    3 red  green orange a   b   c  yes 
    4 red  yellow orange a   b   c  no 
    5 red  yellow orange a   H   c  no 
    6 green yellow orange a   H   c  no 
    7 red  yellow orange a   b   d  yes 
    8 red  yellow orange a   b   e  yes 
    9 red  yellow orange a   b   c  yes 
    10 red  yellow orange a   b   c  yes 
    11 red  yellow orange a   b   c  yes 
    12 red  yellow orange a   b   c  yes 
    13 red  yellow orange a   b   c  no 
    14 red  yellow orange a   b   c  no 
    15 red  yellow orange a   b   c  no 
    16 red  yellow orange d   d   d  no 

從運行上述查詢


5 red yellow orange a H c no 
    16 red yellow orange d d d no 
    4 red yellow orange a b c no 
    13 red yellow orange a b c no 
    14 red yellow orange a b c no 
    15 red yellow orange a b c no 

正如你可以看到實際效果,它包含在輸出行,其中紅,黃,橙有abc代表diffVals,儘管事實上有'是'的紅色黃色的條目,abc代表diffVal秒。

預期結果


5 red yellow orange a H c no 
    16 red yellow orange d d d no 

- 我對格式道歉。我試圖添加屏幕截圖,但由於我是新手,堆棧溢出不會讓我添加圖像。

+1

顯示您的表結構和樣品的輸入和輸出 – Sathish

+0

什麼是確切的期望輸出你期望得到什麼? – peterm

+0

前兩行應該是唯一的行輸出(基於我想要的)最後4行都是與現有「yes」行相同值的行,所以它們不應該輸出。 – user3863111

回答

0

一種方式做到這一點

SELECT * 
    FROM table1 t 
WHERE approved = 'no' 
    AND EXISTS 
(
    SELECT * 
    FROM table1 
    WHERE approved = 'yes' 
    AND apples = t.apples 
    AND bananas = t.bananas 
    AND oranges = t.oranges 
) 
    AND NOT EXISTS 
(
    SELECT * 
    FROM table1 
    WHERE approved = 'yes' 
    AND apples = t.apples 
    AND bananas = t.bananas 
    AND oranges = t.oranges 
    AND diffval1 = t.diffval1 
    AND diffval2 = t.diffval2 
    AND diffval3 = t.diffval3 
); 

輸出:

 
| ID | APPLES | BANANAS | ORANGES | DIFFVAL1 | DIFFVAL2 | DIFFVAL3 | APPROVED | 
|----|--------|---------|---------|----------|----------|----------|----------| 
| 5 | red | yellow | orange |  a |  H |  c |  no | 
| 16 | red | yellow | orange |  d |  d |  d |  no | 

這裏是SQLFiddle演示

+0

太棒了!謝謝,那正是我需要的。我仍然不確定爲什麼我的查詢不會產生相同的結果(可能是由於表鎖定/在不同時間比較不同的行?)無論如何。謝謝你,我欠你一杯啤酒。 – user3863111