【问题标题】:SQLite SELECT col WHERE col=0; changes resultsSQLite SELECT col WHERE col=0;改变结果
【发布时间】:2011-06-08 03:33:16
【问题描述】:

怎么会这样?

sqlite> select read, text from message;
1|No just got off the train
1|yadayada
1|Beautiful
1|<3
1|DONE <3
0|Hey

sqlite> select read, text from message where read=0;
0|
0|Ooo very cool
0|Donors choose?
0|No prize for the computer reading program / model/master class
0|Hey

我正在截断每个 SQL 查询的很长的结果。这些是每个结果的最后几个结果。据我所知,只有一条记录的列 read=0,但是当我添加 where 子句时,突然所有记录返回该值。更令人困惑的是,结果不同,或者至少顺序不同,输出太长了,我无法确定。

非常感谢您的宝贵时间和帮助。

【问题讨论】:

  • 你能匹配 Select count(1) from message 的结果吗?从 read = 0 的消息中选择 count(1);从读取 =1 的消息中选择 count(1)。
  • 呵呵,没想到这一点我觉得很傻。当然……它们加起来,所以“嘿”消息一定是巧合。这让我想知道为什么这么多消息被报告为未读,而应该只有一个。不过谢谢。

标签: sql select sqlite where-clause


【解决方案1】:

您没有在任一 SQL 语句中提供“order by”子句,因此结果会以默认顺序返回给您 - 这可能是通过它们的主键(如果存在的话)或它们的顺序插入到表中。

从您的第一个查询中提供的截断很可能是该表中的最后 6 条记录。从您的第二个查询中提供的截断很可能是该表中的最后 6 条记录 WHERE read = 0。

总而言之,仅仅因为您在第一次查询中提供的 6 行中只看到 1 条 read = 0 的记录,并不意味着只有 1 条记录。这只是意味着最后 6 行中只有 1 条记录。如果您想先查看所有“read = 1”行,然后再查看所有“read = 0”行,请尝试添加“order by”子句。

sqlite> select read, text from message order by read, text;

sqlite> select read, text from message where read=0 order by text;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 2018-12-21
    相关资源
    最近更新 更多