2014-03-04 5 views
0

1의 PostgreSQL에서 다른 테이블의 데이터에 대한 쿼리 결과에서 데이터를 비교

쿼리 위부터
Select data1,name,phone,address from dummyTable limit 4; 

, 내가 예를 들어 다음과 같은 결과를 얻을 것이다 STEP 다음을 가진 후 지금

data1 | name | phone | address 

fgh | hjk | 567...| CA 
ghjkk | jkjii| 555...| NY 

을 위의 결과 나는 위의 쿼리에서 얻은 data1 레코드를 data1이라는 동일한 열이있는 existingTable이라는 데이터베이스의 기존 테이블에 일치 시키려고합니다. 위의 결과가 'fgh'값이 data1이라면 나는 'fgh'을 취하여 열 data1과 비교합니다.

2 단계

다음, 나는 비교 완료하고 후에, 나는 다음과 같은 몇 가지 조건을 적용해야합니다

if((results.data1.value).equals(existingTable.data1.value)) 
then count -- 
else 
count++ 

을 그래서 위의 조건에 의해 내가 설명하려고 그 값의 경우 내가 얻은 결과로부터 얻은 것은 1 씩 카운트 감소를하고, 1 씩 증가하면 카운트가 1 씩 증가합니다.

요약 b asicate 한 쿼리에서 이것을 달성하고 싶다면 PostgreSQL을 사용할 수 있습니까?

+0

문자열을'=='와 비교하려고합니까? '.equals' 메서드를 사용해야합니다. – ferhan

+0

오, 내 잘못, 업데이트! 그게 진짜 코드가 아닌 내가 성취하려고하는 아이디어를주는 것입니다. – AKIWEB

답변

0

난 당신이 간단한 쿼리로 그것을 번역 할 수 있다고 생각 :

SELECT d.data1, d.name, d.phone, d.address 
    , count(*) - 2 * count(e.data1) 
FROM (
    SELECT data1, name, phone, address 
    FROM dummytable 
    -- ORDER BY ??? 
    LIMIT 4 
    ) d 
LEFT JOIN existingtable e USING (data1) 
GROUP BY d.data1, d.name, d.phone, d.address; 

주요 성분은 LEFT [OUTER] JOIN입니다. 설명서 링크를 따릅니다.

count(*)dummytable의 모든 행을 카운트합니다.
count(e.data1)은 에서 일치하는 행만 계산합니다. 일치 항목이 data1 인 경우 (count()은 NULL 값을 계산하지 않습니다). 귀하의 수식과 일치하도록 두 번을 뺍니다.

ORDER BY : 데이터베이스 테이블에는 자연 순서가 없습니다. 예측 가능한 결과를 얻으려면 무엇인가 주문해야합니다.

이있을 수있는 경우는 existingtable에서 복제 있지만,마다 별개의 data1을 계산하면 또는 사용에 가입하기 전에 속는을 제거하려는 EXISTS 반 가입 :

SELECT data1, name, phone, address 
     , count(*) - 2 * count(EXISTS (
          SELECT 1 FROM existingtable e 
          WHERE e.data1 = d.data1) OR NULL) 
FROM (
    SELECT data1, name, phone, address 
    FROM dummytable 
    -- ORDER BY ??? 
    LIMIT 4 
    ) d 
GROUP BY data1, name, phone, address; 

마지막에게 카운트는 (TRUE OR NULL) IS TRUE이지만, (FALSE OR NULL) IS NULL이기 때문에 계산됩니다.

관련 문제