嵌套的内部连接具有相同名称的列?

时间:2012-03-16 02:06:16

标签: sql database

我正在尝试提供一个SQL查询字符串来从三个表中读取信息,它们具有重叠的列名:

Table: Task
Id
TaskDescription
...

Table: TaskAttempt
Id
TaskId
User
...

Table: TaskSubmission
Id
TaskAttemptId
Data
...

任务包含说明。用户可以尝试完成任务并提交结果。每个任务尝试都可以有多个提交。

在审核时,我想提取所有任务提交并显示描述,用户和数据;我还需要提取所有Id字段,以便在审核完成后更新行。

SQL语句将如何捕获它?

2 个答案:

答案 0 :(得分:1)

要处理不同表中相同的列名,必须在列前面添加要从中请求数据的表。这是您的查询外观的非常基本的shell。 JOIN语句需要相应的列,但您没有提供有关它们如何匹配的模式。但是,这会回答有关具有相同名称的列的基本问题。

SELECT Task.Id, Task.TaskDescription, TaskAttempt.Id, TaskAttempt.User, 
    TaskSubmission.Id, TaskSubmission.Data
FROM Task
   JOIN TaskAttempt
       ON Task.Id = TaskAttempt.TaskId
   JOIN TaskSubmission
       ON TaskAttempt.Id = TaskSubmission.TaskAttempId

前缀只是为SQL引擎提供足够的额外数据来了解如何处理歧义,并且它们还可以为未来的读者提供更具表现力的代码。

答案 1 :(得分:0)

您可以使用table_name.field指定要从哪个表中提取,因此:

SELECT Task.Id, TaskAttempt.Id, TaskSubmission.Id
FROM Task, TaskAttempt, TaskSubmission

你明白了。在处理多个表时,最好在所有字段上使用表名。例如:

SELECT Task.Id, Task.TaskDescripton, TaskAttempt.Id...
FROM ...

尽管其他表中不存在TaskDescription,但为了清晰起见,我仍然使用表名。