Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 具有同名列的嵌套内部联接?_Sql_Database - Fatal编程技术网

Sql 具有同名列的嵌套内部联接?

Sql 具有同名列的嵌套内部联接?,sql,database,Sql,Database,我正在尝试使用SQL查询字符串从三个表中读取信息,其中有重叠的列名: Table: Task Id TaskDescription ... Table: TaskAttempt Id TaskId User ... Table: TaskSubmission Id TaskAttemptId Data ... 任务包含一个描述。用户可以尝试完成任务并提交结果。每个任务尝试可以有多个提交 查看时,我希望拉入所有任务提交,并显示描述、用户和数据;我还需要拉入所有Id字段,以便在审阅完成时更新行

我正在尝试使用SQL查询字符串从三个表中读取信息,其中有重叠的列名:

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,则此操作是否有效?