2012-03-16 4 views
0

私は、彼らが重複列名を持つ3つのテーブルから情報を読み取るためのSQLクエリ文字列を思い付くしようとしています:ネストされた内部結合は、同じ名前の列を持ちますか?

Table: Task 
Id 
TaskDescription 
... 

Table: TaskAttempt 
Id 
TaskId 
User 
... 

Table: TaskSubmission 
Id 
TaskAttemptId 
Data 
... 

タスクは記述が含まれています。ユーザーはタスクを完了しようとすることができ、結果を送信します。各タスクの試行は複数の送信を行うことができます。

私はすべてのタスクの提出を引き出し、説明、ユーザー、およびデータを表示したいと思います。レビュー完了時に行を更新できるように、すべてのIdフィールドを取得する必要もあります。

これをキャプチャすると、SQL文はどのように見えますか?

答えて

1

異なるテーブルで同じ列名を処理するには、データを要求しているテーブルを列の前に付けなければなりません。これは、あなたのクエリがどのように見えるかの非常に基本的なシェルです。 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エンジンに十分な余分なデータを与え、彼らはまた、将来の読者にはるかに表現力のコードを提供することができます。

+0

私は外部キーフィールドを追加しました。これは私がそれを作るかどうかTaskAttempt ON Task.Id = TaskAttempt.TaskId JOIN TaskSubmission ON TaskAttempt.Id = TaskSubmission.TaskAttemptId? –

+0

はい、実際には、コードも更新しました。 –

0

あなたはそう、table_name.fieldを使用してからプルするテーブルを指定することができます:あなたはポイントを得る

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

。複数のテーブルを扱う場合は、常にすべてのフィールドでテーブル名を使用することをお勧めします。例:

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

TaskDescriptionは、他のテーブルに存在しないにもかかわらず、私はまだ明確にするためのテーブル名を使用します。

関連する問題