“不明确的列名”错误指的是数据库、表和列 guuu

tho*_*793 1 sqlite select

sqlite3 在下面的查询中给出了“不明确的列名”错误。错误本身引用了一个可以想象的明确列名,将数据库标识为“sourcedb”,将表标识为“答案”,将字段标识为“标记”。为什么这个查询会触发错误?

sqlite> SELECT answers.*
        FROM   sourcedb.answers
               INNER JOIN sourcedb.questions_tests
                 ON sourcedb.questions_tests.testskey = '121212eczema'
               INNER JOIN sourcedb.answers_questions
                 ON sourcedb.questions_tests.questionskey = sourcedb.answers.questionskey
               INNER JOIN sourcedb.answers
                 ON sourcedb.answers.answerskey = sourcedb.answers_questions.questionskey; 
...>    ...>    ...> Error: ambiguous column name: sourcedb.answers.markup
Run Code Online (Sandbox Code Playgroud)

一些额外的细节...

sqlite> pragma table_info(answers);
0|markup|TEXT|0||0
1|identifier|TEXT|0||0
2|text|TEXT|0||0
3|answerskey|INTEGER|0||1
4|answertype|TEXT|0||0
5|ReadPerms||0||0
6|UpdatePerms||0||0
7|DeletePerms||0||0
sqlite> pragma database_list;
0|main|
2|sourcedb|/root/.ttest/database/sqlite/ttest-simple.sqlite
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 5

你有FROM sourcedb.answersINNER JOIN sourcedb.answers所以你两次引入同一个表而没有给出别名。

一些连接条件也可能出现错误。

 FROM   sourcedb.answers
               INNER JOIN sourcedb.questions_tests
                 ON sourcedb.questions_tests.testskey = '121212eczema'
Run Code Online (Sandbox Code Playgroud)

不引用sourcedb.answers在任何地方ON

INNER JOIN sourcedb.answers_questions
                 ON sourcedb.questions_tests.questionskey = sourcedb.answers.questionskey
Run Code Online (Sandbox Code Playgroud)

不引用sourcedb.answers_questionsON

我想你实际上需要类似的东西

SELECT answers.*
FROM   sourcedb.answers
       INNER JOIN sourcedb.answers_questions
         ON sourcedb.answers.answerskey = sourcedb.answers_questions.questionskey
       INNER JOIN sourcedb.questions_tests
         ON sourcedb.questions_tests.questionskey = sourcedb.answers.questionskey
WHERE  sourcedb.questions_tests.testskey = '121212eczema' 
Run Code Online (Sandbox Code Playgroud)