3

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)
);

次に、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

ここで、別の実験として、行ID以外の数値列を組み合わせてみました。一方、どちらの場合も正しい結果が得られます。

私は誰かがここで何が起こっているのかについて洞察を与えることができることを望んでいます。私が理解している限り、それはSQLiteのバグか、SQLの微妙な側面のどちらかです。

ありがとう、

4

2 に答える 2

4

SQLiteのバグのようです-あなたが投稿した最初の結果は、あなたが疑ったように、間違っています。ワークステーションのPG8.3とsqlite3.6.4の両方でテストしましたが、再現できませんでした。すべての場合で正しい結果が得られました。sqliteバージョンにリンクされている可能性があります。アップグレードしてみてください。

于 2008-11-20T01:22:28.203 に答える
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
于 2008-11-20T15:36:01.663 に答える