标签: sqlite

在 sqlite3 交互式 shell 中启用自动完成

我在一台可以使用制表符补全的机器上使用 sqlite3(即.read abc<tab>会自动补全到.read abcdefghij.db. 我想知道如何在我的个人机器上启用它。

编辑

两台机器都是ubuntu linux,shell是bash。我指的是 sqlite 交互式提示中的自动完成。

sqlite

8
推荐指数
1
解决办法
5696
查看次数

SQLite3 不使用带有 json_extract 表达式的覆盖索引

我正在尝试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 index optimization execution-plan

8
推荐指数
1
解决办法
1065
查看次数

如何在两个字段上使用 INNER JOIN 更新 SQLITE 列

如何将此查询转换为 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 java

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

数据库表可以没有主键吗?

数据库表可以没有主键吗?SQLite 允许您定义一个没有主键的表,因此不会有插入异常。

sqlite primary-key

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

SQLite:指定数据类型有什么用?

据我所知,SQLite 不强制定义表数据类型——它具有动态类型。例如,它允许您将字符串插入到数字字段中,或超出字符串的长度。

如果是这样,那么在CREATE TABLE语句中定义数据类型有什么意义?

sqlite datatypes

8
推荐指数
2
解决办法
2633
查看次数

在 SQLite 上写入一行需要多少次磁盘搜索?

据我所知,硬盘每旋转一圈可以有一次磁盘搜索,因此我很想知道将一行写入 SQLite 表需要多少磁盘搜索,包括锁定等。假设没有索引在桌子上(甚至不是主键)。我假设有一个磁盘试图将一行写入文件?如您所知,我想将性能与将相同数据写入平面文件进行比较。

sqlite csv

7
推荐指数
1
解决办法
389
查看次数

将外部应用与 SQL Server 中的相关子查询转换为 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)

sqlite sql-server

7
推荐指数
1
解决办法
5032
查看次数

仅当记录不存在时如何插入记录?

我有一张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)

这给出了以下结果(为了可读性而格式化): …

sqlite insert duplication

7
推荐指数
1
解决办法
3万
查看次数

如何在 SQLite 中透视数据

我有一个表,其中包含文本数据,其中包含一堆不同语言的翻译。每个翻译都是针对特定标签的。

我需要生成一个数据透视表,以便快速获取缺少的内容。

记录的一个例子是

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,从而使该解决方案无效。

我还尝试在选择谓词中使用过滤子句(尽管这意味着对列进行硬编码),但我未能成功。

关于如何实现这一目标有什么想法吗?

sqlite pivot

7
推荐指数
1
解决办法
8909
查看次数

SQLite - 计数如何在没有 GROUP BY 的情况下工作?

有一个像这样的表:

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 aggregate

7
推荐指数
2
解决办法
8099
查看次数