2014-07-22 2 views
0

Approved = 'yes'Approved = 'no' 개의 행을 하나의 테이블에 처리하기 위해 MySQL 쿼리를 작성하려고했습니다. - 몇 가지 방법을 시도했습니다 (자체 조인 및 임시 테이블 만들기/쿼리 포함). 그리고 내가 뭘하려고해도 잘못된 데이터 집합 출력으로 끝납니다. diffVal의 비교 행 사이의이 동일하지 않은 경우이 경우 하나의 테이블에서 차이점 보고서를 선택하십시오. 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 
    ) 

는, 내가 원하는, 같은 사과, 바나나, 오렌지가 행을 비교하기 위해 노력하고 ... 그리고있어 출력되는 세트의 해당 행을 포함시킵니다. 나는 이것이 왜 작동하지 않는지 잘 모르겠지만 이것을 실행할 때마다, 동일한 사과, 바나나, 오렌지가있는 '예'항목이 있는지 여부에 관계없이 모든 '아니오'항목을 포함합니다. diffVals. (거의 diffVal 섹션을 모두 무시하고있는 것처럼)

나는 그것이 바보 같다고 생각하지만, 여러분 중에 의견이 있으면 크게 고맙게 생각합니다.

채워진 표


위의 언급 쿼리 당신이 볼 수 있듯이


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 

을 실행 한

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 

실제 결과 빨간색, 노란색, 주황색이 경우, 그것은 출력 행을 포함 있어요 diffVal에 대해 abc가있는 빨간색 노란색 주황색의 '예'항목이 있음에도 불구하고 diffVals에 대한 abc 에스.

예상 결과


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

- 포맷에 대한 나의 사과. 나는 스크린 샷을 추가하려했지만 새로운 것이기 때문에 스택 오버 플로우로 인해 이미지를 추가 할 수 없었다.

+1

정확한 원하는 출력이 무엇 테이블 구조 및 샘플 입력과 출력 – Sathish

+0

을 보여입니다 네가 얻을 거라고 기대하는거야? – peterm

+0

첫 번째 두 개의 행이 유일한 행 출력이어야합니다 (내가 시도한 것을 기반으로). 마지막 4 개의 행은 기존의 '예'행과 동일한 값을 가진 모든 행이므로 출력하지 않아야합니다. – 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

관련 문제