我在一台可以使用制表符补全的机器上使用 sqlite3(即.read abc<tab>会自动补全到.read abcdefghij.db. 我想知道如何在我的个人机器上启用它。
编辑
两台机器都是ubuntu linux,shell是bash。我指的是 sqlite 交互式提示中的自动完成。
我正在尝试SQLite3使用json_extract表达式在(3.18) 中创建索引。我的目标是执行只需要索引才能产生结果的查询。这样做的原因是这json_extract是一项昂贵的操作,在对较大的数据集和/或值进行操作时会影响性能。我得出结论,我需要一个覆盖索引来满足我的需求。
第 1 步 - 使用正常的表结构测试理论
CREATE TABLE Player (
Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
FirstName TEXT NOT NULL,
MiddleName TEXT,
LastName TEXT NOT NULL
);
CREATE INDEX Player_FirstName ON Player (
FirstName ASC,
LastName ASC
);
EXPLAIN QUERY PLAN SELECT
FirstName, LastName
FROM
Player
WHERE
LENGTH(LastName) > 10
ORDER BY
FirstName
LIMIT
10
OFFSET
0
Run Code Online (Sandbox Code Playgroud)
产量
SCAN TABLE Player USING COVERING INDEX Player_FirstName
Run Code Online (Sandbox Code Playgroud)
这正是我所期望的。Player_FirstName由于该ORDER BY子句,查询计划器认为索引是合适的,并且由于该WHERE …
如何将此查询转换为 SQLite:
UPDATE Table_1
INNER JOIN Table_2 ON (Table_1.Field1 = Table_2.Field1)
AND(Table_1.Field2 = Table_2.Field2)
SET Table_1.Field3 = Table_2.Field3
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的。
UPDATE Table_1
SET Field3 = (SELECT Field3
FROM Table2
WHERE (Field1 = Table_2.Field1)
AND (Field2 = Table_2.Field2))
WHERE Field1 IN (SELECT Table_2.Field1
FROM Table2
WHERE (Field1 = Table_2.Field1)
AND (Field2 = Table_2.Field2))
AND Field2 IN (SELECT Table_2.Field2
FROM Table2
WHERE (Field1 = Table_2.Field1)
AND (Field2 = Table_2.Field2))
Run Code Online (Sandbox Code Playgroud)
查询有效,但我得到错误的结果。
据我所知,SQLite 不强制定义表数据类型——它具有动态类型。例如,它允许您将字符串插入到数字字段中,或超出字符串的长度。
如果是这样,那么在CREATE TABLE语句中定义数据类型有什么意义?
据我所知,硬盘每旋转一圈可以有一次磁盘搜索,因此我很想知道将一行写入 SQLite 表需要多少磁盘搜索,包括锁定等。假设没有索引在桌子上(甚至不是主键)。我假设有一个磁盘试图将一行写入文件?如您所知,我想将性能与将相同数据写入平面文件进行比较。
我需要将 SQL Server 中的查询转换为 SQlite,并且我已将外部应用替换为左外部连接,但是如何限制子查询在这种情况下仅返回 1?以及如何将外部表中的引用值传递到子查询中?
我强调了我无法将其转换为 Sqlite 的事情,有人可以给一些建议吗?
SQL 服务器:
SELECT a.id,
a.CodeValue ,
a.TotalAmount ,
InvoiceRevised.RevisedInvoiceId,
InvoiceRevised.BillNumber AS RevisedInvoice,
patientlookup.RegistrationNumber AS RegistrationNumber,
patientlookup.PatientName AS PatientName,
FROM dbo.Invoices a
OUTER APPLY (
SELECT TOP 1 dbo.Invoices.Id AS RevisedInvoiceId,CodeValue AS InvoiceNumber,
dbo.SCSInvoiceRels.CreatedOn AS InvoiceTime,
dbo.Invoices.CreatedBy AS InvoiceCreatedBy,
dbo.Invoices.TotalAmount,dbo.Invoices.Discount,
dbo.Invoices.RoundAmount
FROM Invoices
INNER JOIN dbo.SCSInvoiceRels ON dbo.Invoices.Id = dbo.SCSInvoiceRels.InvoiceId
AND dbo.SCSInvoiceRels.RecordStatus = 1 AND dbo.Invoices.RecordStatus = 1 AND dbo.SCSInvoiceRels.SCDetailId IN (
SELECT SCDetailId FROM dbo.SCSInvoiceRels WHERE InvoiceId = a.id)
) InvoiceRevised …Run Code Online (Sandbox Code Playgroud) 我有一张PaymentInformation桌子
ID NAME Start End
1 Tina 1/7/2014 1/17/2014
2 Alice 3/7/2014 3/17/2014
3 John 5/7/2014 5/17/2014
4 Michelle 7/7/2014 7/17/2014
Run Code Online (Sandbox Code Playgroud)
我正在动态构建我的 SQL 查询,如下所示:
SQLiteDataBaseQueryHolder3 = "INSERT INTO " + SQLiteHelper.TABLE2_NAME + "(" +
"name, Start, End" +
")VALUES('" +
tempName + "'" +
",'" +start + "'" +
",'" + end + "" +
"')" +
" WHERE NOT EXISTS ( SELECT * FROM " +SQLiteHelper.TABLE2_NAME +" WHERE name = '"+
tempName+"' AND Start = '"+Start+"')"
Run Code Online (Sandbox Code Playgroud)
这给出了以下结果(为了可读性而格式化): …
我有一个表,其中包含文本数据,其中包含一堆不同语言的翻译。每个翻译都是针对特定标签的。
我需要生成一个数据透视表,以便快速获取缺少的内容。
记录的一个例子是
1, en, hello
1, fr, bonjour
1, es, hola
2, en, how are you
2, fr,
3, es, come es stas
Run Code Online (Sandbox Code Playgroud)
尽管所有语言的翻译都应始终存在,但我不能 100% 确定情况确实如此。因此必须考虑缺失字段。
想要的结果是这样的
|ID|EN|FR|ES|
|1|hello|bonjour|hola|
|2|how are you| |come es stas|
Run Code Online (Sandbox Code Playgroud)
我面临的挑战是填充数据库时列顺序可能并不总是相同,因此理论上我应该有一个动态字段列表。
SQLite 中没有直接的 PIVOT 函数,因此我开始尝试使用 group_concat 获取逗号分隔的字符串。
SELECT DISTINCT language, group_concat(word, ',') OVER (PARTITION BY language) AS group_concat
FROM vocabulary;
Run Code Online (Sandbox Code Playgroud)
如果需要的话,我可以稍后在 Python 中运行结果;问题是任何缺失值都不会附加空项,从而将所有串联移动 n,从而使该解决方案无效。
我还尝试在选择谓词中使用过滤子句(尽管这意味着对列进行硬编码),但我未能成功。
关于如何实现这一目标有什么想法吗?
有一个像这样的表:
first_name last_name
------------------------
jack frost
john wayne
betty white
null jackson
Run Code Online (Sandbox Code Playgroud)
这个查询:
first_name last_name
------------------------
jack frost
john wayne
betty white
null jackson
Run Code Online (Sandbox Code Playgroud)
MySQL 和 Postgres 甚至不会运行它。他们以某种方式知道这需要 GROUP BY。
SQLite 生成单行结果:jack 3
MySQL 和 Postgres 如何知道这需要 GROUP BY?为什么还需要 GROUP BY?
为什么 SQLite 的结果是一行?我本来期望输出是这样的:
jack 3
john 3
betty 3
null 3
Run Code Online (Sandbox Code Playgroud) sqlite ×10
aggregate ×1
csv ×1
datatypes ×1
duplication ×1
index ×1
insert ×1
java ×1
optimization ×1
pivot ×1
primary-key ×1
sql-server ×1