2014-06-23 3 views
0

SQLiteStudio를 사용하여 sqlite 데이터베이스를보고 테스트 했으므로 fts3 또는 fts4에 액세스 할 수 없습니다.전체 SQLite 데이터베이스에서 ID를 검색하십시오.

나는 데이터베이스에서 찾을 필요가있는 ID를 가지고 있으며 45 개의 테이블 중 어느 테이블에 속하는지 알 수 없습니다. 거기에 속한 테이블 이름을 반환 할 쿼리를 실행할 수 있습니까?

+0

기본 키로 보는 것은 원래 테이블에 대해서만 유일하게 보장되며 일반적으로 no입니다. 임의의 PKey보다 많은 정보가 필요합니다. – aruisdante

답변

1

SQLiteStudio에서이를 수행 할 수있는 해결책이 있습니다. 이는 모든 테이블에서 전체 검사를 수행하고 모든 테이블의 모든 열 (일치하는 항목을 찾을 때까지 중지 한 다음 중지됨)이므로 매우 느릴 수 있습니다. 경고 받다. 여기

는 당신이 그것을 할 방법은 다음과 같습니다

실행 SQLiteStudio를 열고 "사용자 정의 SQL 함수"대화 상자 (이 파란색 벽돌 아이콘이 하나). 예를 들어 "find"의 새 함수를 추가하고 구현 언어를 Tcl (오른쪽 위 모서리)으로 설정합니다. 코드를 구현으로 붙여 넣습니다.

set value [string map [list "'" "''"] $0] 
foreach table [db eval {select name from sqlite_master where type = "table"}] { 
    set cols [list] 
    foreach infoRow [db getTableInfo $table] { 
     lappend cols "\[[dict get $infoRow name]\] = '$value'" 
    } 
    set res [db eval "SELECT rowid FROM \[$table\] WHERE [join $cols { OR }]"] 
    if {[llength $res] > 0} { 
     return "found in table $table in rows with following ROWID: [join $res ,\ ]" 
    } 
} 
return "not found" 

은 다음과 같이 SQL 쿼리에서 사용 :

select find('your-id'); 

기능은 your-id을 찾기 위해 테이블 ​​후 테이블을 검색합니다. 테이블을 찾으면 your-id과 일치하는 모든 행의 ROWID가 인쇄됩니다. your-id을 찾을 수없는 경우

select * from Products where rowid in (345, 4647, 32546); 

는 다음 find의 결과가 될 것입니다 : not found 그럼 당신은 그의 ROWID를 사용하여 Products 테이블을 조회 할 수 있습니다

found in table Products in rows with following ROWID: 345, 4647, 32546 

: 그것은 뭔가를 반환합니다.

+0

완벽한 - 감사합니다. 나에게 시간의 창고를 구했어! – Nodoid

관련 문제