質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

5568閲覧

Rails - 同じテーブルをjoinするとambiguous column nameする

peanuts

総合スコア34

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2016/05/24 12:07

テーブルを複数joinしたい

現在Arelを使った外部結合の処理を考えています。

テーブルNote の user_id と テーブルUser の idで外部結合したいのと、
テーブルNote の child要素 を alias して取得した child_note の user_id と テーブルUser の id で外部結合し、

両者(親要素・子要素のUserテーブル)からnameを取得したいと考えています。

以下、コードです。

ruby

1note = Note.arel_table 2user = User.arel_table 3child_note = Note.arel_table.alias('child') 4join_table = note.join(child_note, Arel::Nodes::OuterJoin). 5 on(note[:id].eq(child_note[:parent_id])) 6 .join(user, Arel::Nodes::OuterJoin). 7 on(note[:user_id].eq(user[:id])) 8 .join(user, Arel::Nodes::OuterJoin). 9 on(child_note[:user_id].eq(user[:id])).join_sources 10 11@note = Note.joins(join_table).where('note.note_id = ? AND note.parent_id IS NULL AND note.user_id != ?', @note.id, @note.user_id).select(user[:name].as('parent_name'), user[:name].as('child_name'))

上記のコードはSQLite3::SQLException: ambiguous column nameとなります。
userテーブル名がparentとchildで被ってしまっていることが原因だと思います。

困っている点としては明示的に note(親)でuserテーブルjoinした結果を「user_parent」と命名し、child_note(子)でuserテーブルとjoinした結果を「user_child」と命名し、

両者のnoteのnameを一意に取得できるようにしたいです。
試行錯誤してみたものの、別名で命名し、取得することができていません。

小さなアドバイスでも良いので、ご回答頂ければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

aliasで別名を命名できます。

投稿2016/05/24 13:06

peanuts

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問