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)
你有FROM sourcedb.answers,INNER 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_questions在ON
我想你实际上需要类似的东西
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)
| 归档时间: |
|
| 查看次数: |
16123 次 |
| 最近记录: |