使用sqlite3的標準庫,下面的查詢工作正常的sqlite3的命令行:蟒蛇sqlite3的將不執行加入,但在Python 2.6.4 sqlite3的單獨會
select segmentid, node_t, start, number,title from
((segments inner join position using (segmentid))
left outer join titles using (legid, segmentid))
left outer join numbers using (start, legid, version);
但是如果我通過執行它在Python sqlite3的圖書館中,我得到一個錯誤:
>>> conn=sqlite3.connect('data/test.db')
>>> conn.execute('''select segmentid, node_t, start, number,title from
((segments inner join position using (segmentid)) left outer join titles using
(legid, segmentid)) left outer join numbers using (start, legid, version)''')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: cannot join using column start - column not present
in both tables
的加入出現的左手側的(計算)表中有相關的列,因爲如果我自行檢查它,我得到:
>>> conn.execute('''select * from ((segments inner join position using
(segmentid)) left outer join titles using
(legid, segmentid)) limit 20''').description
(('segmentid', None, None, None, None, None, None), ('html', None, None, None,
None, None, None), ('node_t', None, None, None, None, None, None), ('legid',
None, None, None, None, None, None), ('version', None, None, None, None, None,
None), ('start', None, None, None, None, None, None), ('title', None, None,
None, None, None, None))
我的模式是:
CREATE TABLE leg (legid integer primary key, t char(16), year char(16),
no char(16));
CREATE TABLE numbers (
number char(16), legid integer, version integer, start integer,
end integer, prev integer, prev_number char(16), next integer,
next_number char(16), primary key (number, legid, version));
CREATE TABLE position (
segmentid integer, legid integer, version integer, start integer,
primary key (segmentid, legid, version));
CREATE TABLE 'segments'
(segmentid integer primary key, html text, node_t integer);
CREATE TABLE titles (legid integer, segmentid integer, title text,
primary key (legid, segmentid));
CREATE TABLE versions
(legid integer, version integer, primary key (legid, version));
CREATE INDEX idx_numbers_start on numbers (legid, version, start);
我感到困惑,我在做什麼錯。我已經嘗試退出/重新啓動python和sqlite命令行,無法看到我做錯了什麼。這可能是完全明顯的。
對於您的模式和頂部的原始查詢,我得到'錯誤:模棱兩可的列名:segmentid' – msw 2010-05-31 19:36:33
這很令人費解。 USING關鍵字在結果表中合併給定的列名,所以不應該有歧義。哪個版本的sqlite3?正如我所說,使用它和命令行中的類似查詢沒有問題? – 2010-05-31 20:06:17
請參閱下面的詳細信息... – msw 2010-05-31 20:14:32