为什么查询具有不明确的符号?

时间:2018-12-02 13:49:42

标签: c++ sql sqlite

我在我的c ++应用程序中使用sqlite3,并且还用作SQLiteStudio调试查询。

我有两个几乎等效的数据库DBDB1。两者都有具有几乎相同字段的相同表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我使用此列的地方。

我做错了什么?

1 个答案:

答案 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.adb1.tab1.a