Ошибка в SQLite самостоятельного соединения по идентификатору? - PullRequest
3 голосов
/ 20 ноября 2008

Я пытаюсь создать парные комбинации строк на основе их идентификаторов. Версия 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)
);

Тогда есть самообъединение по идентификаторам:

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

Теперь для другого эксперимента я попытался объединить числовой столбец, отличный от идентификатора строки. Это, с другой стороны, дает правильный результат в обоих случаях.

Я надеюсь, что кто-то может дать представление о том, что здесь происходит. Насколько я понимаю, это либо ошибка в SQLite, либо какой-то деликатный аспект SQL, которого я не знаю.

Спасибо

Ответы [ 2 ]

4 голосов
/ 20 ноября 2008

Кажется, что это ошибка в SQLite - первый опубликованный вами результат, как вы и подозревали, неверен. Я протестировал его на PG8.3 и sqlite3.6.4 на своей рабочей станции, не могу воспроизвести. Получил правильный результат во всех случаях. Может быть связано с вашей версией sqlite; попробуйте обновить.

0 голосов
/ 20 ноября 2008
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...