2010-02-13 2 views
0

C++에서 sqlite3 라이브러리를 사용하여 * .sqlite 파일에서 데이터베이스를 쿼리합니다. 두 번째 문이 첫 번째 문으로 쿼리 문을 완료하는 ID를 반환해야합니다sqlite의 중첩 문

char* sql = "select name from table id = (select full_name from second_table where column = 4);" 

: 당신은 sqlite3를 같은에서 쿼리 문을 작성할 수 있습니다.

답변

2

예, 중첩 된 쿼리가 두 개 이상의 행을 반환하지 않도록 할 수 있습니다. 이 문제를 해결하려면 LIMIT 1을 중첩 쿼리의 끝에 추가하십시오. 또한 항상 행을 반환하는지 확인하십시오. 그렇지 않으면 기본 쿼리가 작동하지 않습니다.

char* sql = "select name from table WHERE id IN (select full_name from second_table where column = 4);" 

하거나 JOIN 사용할 수 있습니다 : 당신이 중첩 된 쿼리에서 여러 행과 일치 할 경우

는, 당신은과 같이, 하나 IN 사용할 수있는 IN 것을

char* sql = "select name from table JOIN second_table ON table.id = second_table.full_name WHERE second_table.column = 4" 

주 방법이 매우 느릴 수 있으며 오른쪽 열에서 색인을 생성하면 JOIN이 매우 빠를 수 있습니다.

+0

LIMIT 1을 추가하면 다른 오류가 보이지 않을 수 있습니다. 아마도 그의 쿼리는 오직 하나의 행만 리턴 할 것입니다. 그렇지 않은 경우 오류를 원할 수 있습니다 (!). – Joe

+0

그것은 열 4와 일치하는 테이블에서 'full_name'을 반환합니다. 나는 'full_name'을 얻기 위해 for 루프와 같은 것을 사용할 필요가 있다고 생각합니다. – cpx

+0

+1, 작동했습니다. :) – cpx

1

O SQLiteadmin (http://sqliteadmin.orbmu2k.de/)을 사용하면 데이터베이스를보고 쿼리를 직접 작성할 수 있습니다 (테스트 등).