标签: sqlite

如何强制 SQLite 实现子查询?

因为 SQLite 有时会对random()出现在子查询中的函数进行多次评估,这可能是一个错误,例如:

select op, op from (select abs(random())%10 as op from (select 1));
3|1
Run Code Online (Sandbox Code Playgroud)

我需要一种简单的方法来强制 SQLite 实现子查询,以便random()只计算一次

这是演示的简化示例 - 我的真实世界查询没有from (select 1)但从视图中选择

sqlite

6
推荐指数
1
解决办法
4074
查看次数

如何在 SQLite 中使用 CREATE TABLE ... AS 和主键

来自 CREATE TABLE http://www.sqlite.org/lang_createtable.html 的SQLite 文档:

使用 CREATE TABLE AS 创建的表没有 PRIMARY KEY 并且没有任何类型的约束。

那么有没有什么通用的方法来创建带有主键和其他索引信息的表?

sqlite

6
推荐指数
1
解决办法
9179
查看次数

Like 谓词只匹配整个单词

我有一个 SQLite 数据库,其中有一个名为minecraft.

+----+----------------------+
| id |         name         |
+----+----------------------+
|  1 | Pocket Mine MP       |
|  2 | Open Computers       |
|  3 | hubot minecraft skin |
|  4 | Terasology           |
|  5 | msm                  |
+----+----------------------+
Run Code Online (Sandbox Code Playgroud)

我需要找到所有在其“名称”字段中包含“e”和“o”的记录。这是我的选择查询:

select * from minecraft where name like '%e%o%'
Run Code Online (Sandbox Code Playgroud)

以下是上述查询的结果:

+----+----------------+
| id |      name      |
+----+----------------+
|  2 | Open Computers |
|  4 | Terasology     |
+----+----------------+
Run Code Online (Sandbox Code Playgroud)

问题是 Like 谓词匹配整个值,而不是单词。不应该匹配 id = 2 的行,因为所有条件都没有出现在一个单词中('e' 出现在第一个单词中,'o' …

sqlite select like

6
推荐指数
1
解决办法
3129
查看次数

直接将 csv gzip 文件导入 SQLite 3

我想将 15GB 文件逗号分隔的 gzip 压缩文件导入 Sqlite 3,而不必使用临时文件。

我想运行如下命令:

zcat input/surgical_code.csv.gz | tail -n +2 | sqlite3 db.sqlite ".import /dev/stdin surgical_code"
Run Code Online (Sandbox Code Playgroud)

这会解压缩文件,跳过标题并尝试导入。

问题是我无法在与 SQlite3 相同的引用命令上指定.mode cvs.separator ","

有任何想法吗?

使用$(echo -e 'line1\nline2')对我不起作用:

gzcat input/surgical_code.csv.gz | tail -n +2 | sqlite3 db.sqlite $(echo -e '.mode csv \n .separator \",\"\n.import /dev/stdin')
Run Code Online (Sandbox Code Playgroud)

Error: mode should be one of: ascii column csv html insert line list tabs tcl

sqlite import csv

6
推荐指数
2
解决办法
3798
查看次数

使用元组数组的 SELECT 查询

我可以像这样匹配一组条件:

select ID from FOO where col1=1 and col2=2 and col3=3
Run Code Online (Sandbox Code Playgroud)

但是,如果我有一个数组,[(1,2,3), (4,5,6), (7,8,9)]在这种情况下如何获取 ID 呢?

为了澄清,我想要一种将每个元组与三列匹配的方法。如果它被打破,它将是:

select ID from FOO where col1=1 and col2=2 and col3=3

select ID from FOO where col1=4 and col2=5 and col3=6

select ID from FOO where col1=7 and col2=8 and col3=9
Run Code Online (Sandbox Code Playgroud)

如果我必须循环,就这样吧,我认为可能有一种更优雅的方法来做到这一点。

我的 sqlite 版本是 3.8.11,它随 Python 3.5.1 一起提供。

sqlite

6
推荐指数
1
解决办法
9919
查看次数

如何正确对齐 SQLite 中的列?

我最近开始学习 SQLite,我正在尝试将表的数据输出到终端 (macOS)。但是,当某些列没有数据(例如在第二个条目中)时,我设置.mode column或未.mode tab正确对齐后的结果。

例如,在 Donna 没有年龄和地点数据的列模式中:

name            surname             age         place              
--------------  ------------------  ----------  ------------------
John  Smith  34          assistant manager
Donna  Patterson  
Run Code Online (Sandbox Code Playgroud)

并在选项卡模式下:

name surname  age   place   
John Smithonian     34 assistant manager
Donna Patterson
Run Code Online (Sandbox Code Playgroud)

但理想的结果是:

name            surname             age         place              
--------------  ------------------  ----------  ------------------
John            Smith               34          assistant manager
Donna           Patterson                     
Run Code Online (Sandbox Code Playgroud)

有什么我不知道的吗?我学习的书中的所有示例都描述了正确对齐的所有列。

标签模式也会发生同样的事情。

我正在使用预装 3.8 版 SQLite 的 Mac 上的 Terminal.app 工作

在后来的测试中,我发现如果我的列都填充了信息,那么所有数据是否对齐都是可能的。这取决于信息。当我Phone Number在其中一个示例中添加一列时,漂亮的安排丢失了。

sqlite mac-os-x

6
推荐指数
1
解决办法
1672
查看次数

如果我插入空值而不是零,我的 sqlite 数据库会占用更少的空间吗

我有一个表,其中一列中插入的大多数值都是 0。如果我插入空值而不是零,数据库是否应该更小?

sqlite

5
推荐指数
1
解决办法
1109
查看次数

SQLite 磁盘 I/O 错误 (3850)

我似乎无法弄清楚是什么导致了 I/O 错误:

$sqlite3 db.sqlite < data.sql 
(3850) disk I/O error
Error: near line 2: disk I/O error
(3850) disk I/O error
Error: near line 3: disk I/O error
(3850) disk I/O error
Error: near line 5: disk I/O error
(3850) disk I/O error
Error: near line 8: disk I/O error
(3850) disk I/O error
Error: near line 9: disk I/O error
Run Code Online (Sandbox Code Playgroud)

参见下面data.sql的内容

$ less data.sql
.log stderr 
PRAGMA synchronous = OFF;
PRAGMA journal_mode = MEMORY;
BEGIN TRANSACTION;
CREATE TABLE …
Run Code Online (Sandbox Code Playgroud)

sqlite errors

5
推荐指数
1
解决办法
5526
查看次数

离线安装DBeaver SQLite驱动程序?

我想将 DBeaver 与 SQLite 一起使用,但网络防火墙不允许外部连接。所以DBeaver无法自动下载驱动程序。

在哪里可以下载它的 SQLite 驱动程序以及如何在 DBeaver 中手动安装它?

sqlite dbeaver

5
推荐指数
1
解决办法
2万
查看次数

优化两个值之间的搜索

我有一个以整数时间戳作为主键的表。几乎该表上的每个查询都具有以下模式

SELECT * FROM table WHERE timestamp BETWEEN x AND y

这些范围通常明显小于邮票的总范围。插入很少发生,通常是在每个其他现有标记之后的时间戳处发生。

我可以以某种方式告诉我的数据库(SQLite)保持这些条目“排序”,然后仅从开始时间戳进行选择,从那里搜索行,然后在超过结束时间戳后立即停止,以避免扫描整个表并比较每一行的值?或者这已经发生了?

sqlite query-performance

5
推荐指数
1
解决办法
510
查看次数

标签 统计

sqlite ×10

csv ×1

dbeaver ×1

errors ×1

import ×1

like ×1

mac-os-x ×1

query-performance ×1

select ×1