2011-09-26 1 views
1

table1에서 모든 항목을 가져오고 각각의 table1 column2 항목을 table2 column2 항목과 비교하는 쿼리는 어떻게 수행합니까?일치하는 결과로 새 열이 추가되는 쿼리를 수행하는 방법은 무엇입니까?

일치하는 항목이 있으면 마지막 쿼리에 값 1 또는 0이있는 추가 열 3이 포함됩니다. 아래 예제 테이블과 예상 결과를 참조하십시오.

  • table1 :

    _id col1  col2 
    --- ------- ---- 
    0 Jon  25 
    1 Tim  24 
    2 Frank 38 
    3 Josh  234 
    4 Lettuse 23 
    5 Whally 12 
    
  • table2 :

    _id col1 col2 
    --- ----- ---- 
    0 House 45 
    1 Dog 23 
    2 Pat 24 
    3 Lake 123 
    4 Water 43 
    5 Hot 2 
    
  • newTable1Results :

    _id col1  col2 col3 
    --- ------- ---- ---- 
    0 Jon  25 0 
    1 Tim  24 1 
    2 Frank 38 0 
    3 Josh  234 0 
    4 Lettuse 23 1 
    5 Whally 12 0 
    
  • 0,123,516
+1

간단한 예를 들려 줄 수 있습니까? 정확히 무엇을하려고하는지 이해하는 데 어려움을 겪고 있습니다. – glibdud

+0

select * from table1 left table1.column1 = table2.column1 ->이 테이블은 조인 목록과 일치하지 않는 열에 대해 'null'을 표시합니다. 그런 다음 'ifnull (column1)'을 사용하여 column3에 대해 0/1을 얻으십시오. – ethrbunny

+0

@glibdud 업데이트 된 예제를 참조하십시오 ... – Jona

답변

1

난 당신이 이런 식으로 뭔가를 찾고 생각 :

select t1._id, t1.col1, t1.col2, t2.col2 is not null as col3 
from table1 t1 
left outer join table2 t2 on t1.col2 = t2.col2 
order by t1._id 

SQLite는의 논리 값은 0과 1 그래서 당신의 선택에서 간단한 t2.col2 is not null 당신에게 0 또는 1 당신을 줄 것입니다.

위의 당신에게 제공해야이 :

_id | col1 |col2 | col3 
----+--------+-----+----- 
    0 | Jon | 25 | 0 
    1 | Tim | 24 | 1 
    2 | Frank | 38 | 0 
    3 | Josh | 234 | 0 
    4 | Lettuse| 23 | 1 
    5 | Whally | 12 | 0 
+0

+1 그래서 SQLite는 부울을 매우 잘 갖습니다. –

+0

답변 해 주셔서 감사합니다! 그것은 내가 찾고 있었던 것이 완벽합니다. :) – Jona

+0

@Jona : Andriy 's는 모든 SQL 데이터베이스에서 작동하는 솔루션을 원한다면 검토하십시오. 결과는 동일해야하지만 SQL의 CASE는 약간 시끄러운 경향이 있습니다 (그러나 이식성이 있습니다). –

1
당신은 좌 가입과 일치 여부에 따라 col3 열 계산 사용할 수

:

경우
SELECT 
    t1.*, 
    CASE 
    WHEN t2._id IS NULL THEN 0 
    ELSE 1 
    END AS col3 
FROM table1 t1 
    LEFT JOIN table2 t2 ON t1.col2 = t2.col2 

table2.col2 가능하게 포함 할 수 중복 , 위의 쿼리는 중복을 제공 할 수도 있습니다. 그러면 다른 방법을 시도해 볼 수 있습니다.

SELECT 
    t1.*, 
    CASE 
    WHEN EXISTS (
     SELECT * 
     FROM table2 
     WHERE col2 = table1.col2 
    ) 
     THEN 1 
    ELSE 0 
    END AS col3 
FROM table1 
+0

SQLite [fakes booleanans] (http://www.sqlite.org/datatype3.html#boolean) MySQL과 같은 방식으로 0과 1. 포터블 솔루션과 중복을 고려하면 +1. –

+0

답장을 보내 주신 Andriy에게 감사드립니다! – Jona

관련 문제