SQLiteStudio를 사용하여 sqlite 데이터베이스를보고 테스트 했으므로 fts3 또는 fts4에 액세스 할 수 없습니다.전체 SQLite 데이터베이스에서 ID를 검색하십시오.
나는 데이터베이스에서 찾을 필요가있는 ID를 가지고 있으며 45 개의 테이블 중 어느 테이블에 속하는지 알 수 없습니다. 거기에 속한 테이블 이름을 반환 할 쿼리를 실행할 수 있습니까?
SQLiteStudio를 사용하여 sqlite 데이터베이스를보고 테스트 했으므로 fts3 또는 fts4에 액세스 할 수 없습니다.전체 SQLite 데이터베이스에서 ID를 검색하십시오.
나는 데이터베이스에서 찾을 필요가있는 ID를 가지고 있으며 45 개의 테이블 중 어느 테이블에 속하는지 알 수 없습니다. 거기에 속한 테이블 이름을 반환 할 쿼리를 실행할 수 있습니까?
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
: 그것은 뭔가를 반환합니다.
완벽한 - 감사합니다. 나에게 시간의 창고를 구했어! – Nodoid
기본 키로 보는 것은 원래 테이블에 대해서만 유일하게 보장되며 일반적으로 no입니다. 임의의 PKey보다 많은 정보가 필요합니다. – aruisdante