因为 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)但从视图中选择
来自 CREATE TABLE http://www.sqlite.org/lang_createtable.html 的SQLite 文档:
使用 CREATE TABLE AS 创建的表没有 PRIMARY KEY 并且没有任何类型的约束。
那么有没有什么通用的方法来创建带有主键和其他索引信息的表?
我有一个 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' …
我想将 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
我可以像这样匹配一组条件:
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,我正在尝试将表的数据输出到终端 (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在其中一个示例中添加一列时,漂亮的安排丢失了。
我有一个表,其中一列中插入的大多数值都是 0。如果我插入空值而不是零,数据库是否应该更小?
我似乎无法弄清楚是什么导致了 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) 我想将 DBeaver 与 SQLite 一起使用,但网络防火墙不允许外部连接。所以DBeaver无法自动下载驱动程序。
在哪里可以下载它的 SQLite 驱动程序以及如何在 DBeaver 中手动安装它?
我有一个以整数时间戳作为主键的表。几乎该表上的每个查询都具有以下模式
SELECT * FROM table WHERE timestamp BETWEEN x AND y
这些范围通常明显小于邮票的总范围。插入很少发生,通常是在每个其他现有标记之后的时间戳处发生。
我可以以某种方式告诉我的数据库(SQLite)保持这些条目“排序”,然后仅从开始时间戳进行选择,从那里搜索行,然后在超过结束时间戳后立即停止,以避免扫描整个表并比较每一行的值?或者这已经发生了?