sql - SQL查询选择多列时返回值,但只选择一列时没有数据
问题描述
仅选择一列时,我无法返回数据。此列是一个整数格式,列名为“日期”。我正在使用 SQLite3。
sqlite> .once table.txt
sqlite> select "date",* from messages limit 3;
sqlite> .once justColumn.txt
sqlite> select "date" from messages limit 3;
输出表.txt
date|id|folderID|messageKey|conversationID|date|headerMessageID|deleted|jsonAttributes|notability
1556338536000000|32|2|13330|1|1556338536000000|20190427T041536.3792559390306544911.expiry@letsencrypt.org|0|{"43":1,"44":[2],"45":[],"46":[],"50":false,"51":[],"52":[1,2],"53":[2],"55":[[2,1]],"57":[],"58":false,"59":false,"60":false,"61":false}|1
1556339727000000|33|8|2|2|1556339727000000|20190427T043526.4397757710180913572.expiry@letsencrypt.org|0|{"43":1,"44":[2],"45":[],"46":[],"50":false,"51":[],"52":[1,2],"53":[2],"57":[],"58":false,"59":true,"60":false,"61":false}|0
1557332781000000|34|2|13430|3|1557332781000000|1605547663.1557332777559.JavaMail.cfservice@SL132APP2|0|{"43":3,"44":[2],"45":[],"46":[],"50":false,"51":[],"52":[3,2],"53":[2],"55":[[2,3]],"57":[],"58":false,"59":false,"60":false,"61":false}|1
justColumn.txt
date
我希望两个查询在第一列中返回相同的数据,但这不是正在发生的事情。什么是?
解决方案
从文档中:
如果返回多行的 SELECT 语句没有 ORDER BY 子句,则返回行的顺序是未定义的。
我能够重现您使用此表看到的内容:
CREATE TABLE test(id INTEGER PRIMARY KEY, date INTEGER, foo, bar);
INSERT INTO test(date, foo, bar) VALUES (25, 'a', 'b'), (50, 'c', 'd'), (75, 'e', 'f');
INSERT INTO test(foo,bar) VALUES ('g', 'h'), ('i', 'j'), ('k', 'l'); -- null dates
CREATE INDEX test_idx_date ON test(date);
第一个查询:
sqlite> SELECT * FROM test LIMIT 3;
id date foo bar
---------- ---------- ---------- ----------
1 25 a b
2 50 c d
3 75 e f
sqlite> EXPLAIN QUERY PLAN SELECT * FROM test LIMIT 3;
QUERY PLAN
`--SCAN TABLE test
第二个查询:
sqlite> .null (null)
sqlite> SELECT date FROM test LIMIT 3;
date
----------
(null)
(null)
(null)
sqlite> EXPLAIN QUERY PLAN SELECT date FROM test LIMIT 3;
QUERY PLAN
`--SCAN TABLE test USING COVERING INDEX test_idx_date
第二个从具有请求列而不是整个表的索引中提取结果,并且该索引中的行以与表中的行不同的顺序返回,因此结果不同。我想你的桌子的情况也差不多。
推荐阅读
- java - Java解析包含字符串映射的Json对象以映射到字符串到字符串数组
- ssms - 如何回答 xp_cmdshell?
- android - 如何将工作人员参数传递给 WorkManager 类
- json - 如何使用 Json Extractor 获取访问令牌 Jmeter
- python - 使用 re.compile 根据其特征对文本文件中的未知单词进行分类
- c++ - 导致高 RTT 值的数据包数量少
- mysql - 为什么 MySQL 8 在子选择括号上抛出语法错误?
- excel - Countif 基于期间是否存在日期
- jsf - p:datatable rowkey 没有用 var 解析
- sql-server - MSSQL 按嵌套值分组