我在我的c ++应用程序中使用sqlite3,并且还用作SQLiteStudio调试查询。
我有两个几乎等效的数据库DB
和DB1
。两者都有具有几乎相同字段的相同表Tab1
:DB.Tab1 = [a, b, c, d
]列和DB1.Tab1 = [a, b, c, d, e
]列。
当我尝试执行此查询时:
SELECT DB1.Tab1.a, DB1.Tab1.b, DB1.Tab1.c FROM DB1.Tab1 LEFT JOIN Tab1 ON (DB1.Tab1.a = Tab1.a);
我有一个奇怪的错误:ambiguous name: Tab1.a
。
在执行此查询之前,我先打开DB
,然后将DB1
附加到当前连接。
我尝试在另一个字段d
上连接两个表,尝试选择更多或更少的字段,尝试指定全名或简称-即使它只是一个错误,它始终是相同的错误ambiguous name
我使用此列的地方。
我做错了什么?
答案 0 :(得分:1)
这些表具有相同的名称,但位于不同的数据库中。这使我感到困惑,更不用说SQL编译器了。
只需分配您自己的别名:
SELECT dt1.a, dt1.b, dt1.c
FROM DB1.Tab1 dt1 LEFT JOIN
Tab1 t1
ON dt1.a = t1.a;
问题是,根据SQL用于别名的规则,tab1.a
可以引用tab1.a
或db1.tab1.a
。