在整个SQLite数据库中搜索ID
我正在使用SQLiteStudio查看和测试sqlite数据库,这意味着我没有访问fts3或fts4的权限在整个SQLite数据库中搜索ID,sqlite,Sqlite,我正在使用SQLiteStudio查看和测试sqlite数据库,这意味着我没有访问fts3或fts4的权限 我有一个需要从数据库中查找的id,但不知道它属于45个表中的哪一个。我是否可以运行一个查询来返回它所属的表名?在SQLiteStudio中有一个解决方案。请注意,这会对所有表、每个表中的所有列进行完整扫描,直到找到匹配项为止,然后停止,因此这可能会非常慢。被警告 以下是您的操作方法: 运行SQLiteStudio,打开自定义SQL函数对话框,它是一个带有蓝色砖块图标的对话框。 添加新函数,
我有一个需要从数据库中查找的id,但不知道它属于45个表中的哪一个。我是否可以运行一个查询来返回它所属的表名?在SQLiteStudio中有一个解决方案。请注意,这会对所有表、每个表中的所有列进行完整扫描,直到找到匹配项为止,然后停止,因此这可能会非常慢。被警告 以下是您的操作方法: 运行SQLiteStudio,打开自定义SQL函数对话框,它是一个带有蓝色砖块图标的对话框。 添加新函数,例如查找并将其实现语言设置为右上角的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');
$ dbSearchString.sh "text to search for" database.db
该函数将扫描一个又一个表以查找您的-id。一旦找到一个表,它将打印与您的-id匹配的所有行的RowID。它将返回类似以下内容:
found in table Products in rows with following ROWID: 345, 4647, 32546
然后,您可以使用这些行ID查询Products表:
select * from Products where rowid in (345, 4647, 32546);
如果找不到您的id,那么查找的结果将是:找不到。将此shell脚本写入名为dbSearchString.sh的文件中: !/垃圾箱/垃圾箱 searchFor=$1 db=2美元 sqlite3$db.tables |读表时;做 output=`sqlite3-行$db select*from$table | grep$searchFor` 如果[$?-eq 0]];然后 在${table}中找到回显: echo$输出 fi 完成 然后像这样使用它:
select find('your-id');
$ dbSearchString.sh "text to search for" database.db
因为主键只保证它们来自的表是唯一的,一般来说不是。你需要的信息不仅仅是一个随机的PKey。