2008-11-20 8 views
3

J'essaie de générer des combinaisons de lignes par paires en fonction de leurs identifiants. La version de SQLite est 3.5.9. Le contenu de la table sont les suivantes:Bug dans SQLite auto-jointure sur id?

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

avec le schéma de table étant:

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

Puis il y a le autojointure sur 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 

Ce qui est clairement pas ce que je veux. Maintenant, en changeant l'ordre de t2 et t1 produit le résultat correct:

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 

Maintenant, pour une autre expérience, j'ai essayé la combinaison sur une colonne numérique autre que id ligne. D'un autre côté, cela donne un résultat correct dans les deux cas. Je souhaite que quelqu'un puisse donner un aperçu de ce qui se passe ici. Pour autant que je comprenne, c'est soit un bug dans SQLite ou un aspect délicat de SQL je ne sais pas.

Merci,

Répondre

4

semble être un bug dans SQLite - le premier résultat que vous avez envoyé, comme vous le soupçonnez, mauvais. Je l'ai testé sur PG8.3 et sqlite3.6.4 sur mon poste de travail, ne pouvait pas reproduire. Le résultat est correct dans tous les cas. Peut être lié à votre version de sqlite; essayer de mettre à jour.

+0

Confirmer le résultat correct pour la première requête dans sqlite 3.3.14 via python. –

0
SQLite version 3.6.2 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> create table mytable (
    ...> id integer not null, 
    ...> name varchar, 
    ...> val integer, 
    ...> primary key (id) 
    ...>); 
sqlite> insert into mytable values(null,'A',20); 
sqlite> insert into mytable values(null,'B',21); 
sqlite> insert into mytable values(null,'C',22); 
sqlite> select t1.id, t2.id from mytable as t1, mytable as t2 where t2.id > t1.id; 
1|2 
1|3 
2|3