我正在尝试提供一个SQL查询字符串来从三个表中读取信息,它们具有重叠的列名:
Table: Task
Id
TaskDescription
...
Table: TaskAttempt
Id
TaskId
User
...
Table: TaskSubmission
Id
TaskAttemptId
Data
...
任务包含说明。用户可以尝试完成任务并提交结果。每个任务尝试都可以有多个提交。
在审核时,我想提取所有任务提交并显示描述,用户和数据;我还需要提取所有Id字段,以便在审核完成后更新行。
SQL语句将如何捕获它?
答案 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
,但为了清晰起见,我仍然使用表名。