Sql 具有同名列的嵌套内部联接?
我正在尝试使用SQL查询字符串从三个表中读取信息,其中有重叠的列名:Sql 具有同名列的嵌套内部联接?,sql,database,Sql,Database,我正在尝试使用SQL查询字符串从三个表中读取信息,其中有重叠的列名: Table: Task Id TaskDescription ... Table: TaskAttempt Id TaskId User ... Table: TaskSubmission Id TaskAttemptId Data ... 任务包含一个描述。用户可以尝试完成任务并提交结果。每个任务尝试可以有多个提交 查看时,我希望拉入所有任务提交,并显示描述、用户和数据;我还需要拉入所有Id字段,以便在审阅完成时更新行
Table: Task
Id
TaskDescription
...
Table: TaskAttempt
Id
TaskId
User
...
Table: TaskSubmission
Id
TaskAttemptId
Data
...
任务包含一个描述。用户可以尝试完成任务并提交结果。每个任务尝试可以有多个提交
查看时,我希望拉入所有任务提交,并显示描述、用户和数据;我还需要拉入所有Id字段,以便在审阅完成时更新行
SQL语句是什么样子的呢?要处理不同表中相同的列名,必须在列前面加上请求数据的表。这是查询的基本外壳。
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引擎提供足够的额外数据,让它知道如何处理歧义,它们还可以为未来的读者提供更具表现力的代码。您可以使用
table\u name.field
指定要从哪个表中提取,因此:
SELECT Task.Id, TaskAttempt.Id, TaskSubmission.Id
FROM Task, TaskAttempt, TaskSubmission
你明白了。处理多个表时,最好在所有字段上使用表名。例如:
SELECT Task.Id, Task.TaskDescripton, TaskAttempt.Id...
FROM ...
尽管其他表中不存在
tasksdescription
,但为了清晰起见,我仍然使用表名。我添加了外键字段。如果我将其设置为在Task上加入TaskAttention.Id=TaskAttention.TaskId在TaskAttention上加入TaskSubmission.Id=TaskSubmission.TaskAttemptId,则此操作是否有效?