Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在整个SQLite数据库中搜索ID_Sqlite - Fatal编程技术网

在整个SQLite数据库中搜索ID

在整个SQLite数据库中搜索ID,sqlite,Sqlite,我正在使用SQLiteStudio查看和测试sqlite数据库,这意味着我没有访问fts3或fts4的权限 我有一个需要从数据库中查找的id,但不知道它属于45个表中的哪一个。我是否可以运行一个查询来返回它所属的表名?在SQLiteStudio中有一个解决方案。请注意,这会对所有表、每个表中的所有列进行完整扫描,直到找到匹配项为止,然后停止,因此这可能会非常慢。被警告 以下是您的操作方法: 运行SQLiteStudio,打开自定义SQL函数对话框,它是一个带有蓝色砖块图标的对话框。 添加新函数,

我正在使用SQLiteStudio查看和测试sqlite数据库,这意味着我没有访问fts3或fts4的权限


我有一个需要从数据库中查找的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。