sql - SQLite 自连接 ID 中的错误?

标签 sql sqlite join

我正在尝试根据行的 ID 生成成对的行组合。 SQLite 版本是 3.5.9。表格内容如下:

id|name|val  
1|A|20
2|B|21
3|C|22

表架构为:

CREATE TABLE mytable (
    id INTEGER NOT NULL, 
    name VARCHAR, 
    val INTEGER, 
    PRIMARY KEY (id)
);

然后是 ids 上的自连接:

sqlite> select t1.id, t2.id from mytable as t1, mytable as t2 where t2.id > t1.id;
id|id
2|2
2|3
3|3

这显然不是我想要的。现在,更改 t2 和 t1 的顺序会产生正确的结果:

sqlite> select t1.id, t2.id from mytable as t2, mytable as t1 where t2.id > t1.id;
id|id
1|2
1|3
2|3

现在,对于另一个实验,我尝试在行 ID 以外的数字列上进行组合。另一方面,这在两种情况下都给出了正确的结果。

我希望有人能深入了解这里发生的事情。据我所知,它要么是 SQLite 中的错误,要么是我不知道的 SQL 的某些微妙方面。

谢谢,

最佳答案

似乎是 SQLite 中的错误 - 正如您所怀疑的那样,您发布的第一个结果是错误的。我已经在我的工作站上的 PG8.3 和 sqlite3.6.4 上测试过,无法重现。在所有情况下都得到正确的结果。可能与您的 sqlite 版本相关联;尝试升级。

关于sql - SQLite 自连接 ID 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/304043/

相关文章:

sql - 带分组的复数和

mysql - SQL:我们需要 ANY/SOME 和 ALL 关键字吗?

java - SQLite 数据库应用程序不断崩溃

mongodb - 为什么 MongoDB 文档建议不要使用 DBREF?

dataframe - 具有特定条件的 Pyspark crossJoin

sql - 如何在左外连接中使用 CTE?

Python Pandas 0.14.0。使用 dataframe.to_sql 时时间戳格式错误

python - 使用 sqlalchemy 在 sqlite 数据库中保存 numpy 整数

带前缀的 MySQL 输出 *

mysql - 即使在相关表中找不到相关记录,也可以从一个表中检索所有记录