2016-04-16 2 views
4

私のDBテーブルは、そのようなものです:別の場所でテーブルに同じ列を2回追加するにはどうすればよいですか?

  1. ルート - 列を持つルートのテーブル、:
    。 destination_id
    b。 departure_id
  2. 宛先 - すべての宛先の表。列:
    a。 destination_id
    b。 destination_name。

すべての宛先も出発地であるため、両方のテーブルを1つ使用します。次のように

関係がある:

1 routes.destination_id = destinations.destination_id、

2 routes.departure_id = destinations.destination_id

説明したように、私が必要結果は:

routes.destination_id = 3とroutes.departure_id = 5の場合、それぞれを宛先表の対応する名前に一致させ、正しい列名を結果に入れる必要があります。 departure_cit yと同じです。今、私は両方の異なるIDのために同じ名前を取得するので、もしdestination_id#3がニューヨークでdestination_id#5がラスベガスなら、私はニューヨークと私の両方が必要なものではないでしょう。

これまでのところ、私のクエリは以下のようになります。あなたはJOINを使用するように私に言っている前に

SELECT routes.*, destinations.destination_name as 'departure_city', destinations.destination_name as 'destination_city' 
FROM routes, destinations 
WHERE routes.route_departure_id = destinations.destination_id 

、私は登録しようとそれを行っているが、列名を変更することができませんでした!また、私はいつもすべてのテーブルの列を受け取りました、そして、私はJOINで必要な列だけを得る方法を知らない!

私の問題は、宛先から2回、1回はroute_destination、もう1回はroute_departureで値を表示できないということです。あなたはを探している

+0

この質問のクエリは、新しいJOINキーワードの代わりに古い "カンマ"構文を使用していますが、FROM句に2つのテーブルの結合操作を指定しています。 (ジョイン操作のために旧式のコンマ構文を取り除き、JOINキーワードを使用することが望ましいが、これは実際にはクエリを変更するものではない。)SELECTリストの式にエイリアスを割り当てて、結果セットの列に名前を割り当てることができます。 "departure"都市を検索するための結合操作と、 "arrival"都市を検索するための* second * join操作が必要です。 – spencer7593

答えて

2

は加入:

SELECT r.*, 
     dep.destination_name as departure_city, 
     dest.destination_name as destination_city 
FROM routes r JOIN 
    destinations dep 
    ON r.departure_id = dep.destination_id JOIN 
    destinations dest 
    ON r.destination_id = dest.destination_id; 

追加アドバイス:

  • 使用テーブルの別名を。彼らは、クエリをより簡単に書いて読めるようにします。
  • FROM句にカンマを使用しないでください。 常には、明示的なJOIN構文を使用します。
  • 一重引用符を使用して列の別名を定義しないでください。文字列と日付の定数には単一引用符を使用してください。引用符で囲む必要のある名前を使用している場合は、バッククォートを使用します(バックトックは必要ないように名前を変更してください)。
+0

すばらしい&すばらしい応答をありがとう!それは素晴らしい作品です!私は、SQLクエリの実装方法のロジックを強く理解していないことを知りました。今は、あなたのおかげでそれがずっと良くなっています。あなたが知っていることがない場合は、それは私にそんなに役立つだろうプロのような私のMySQLのスキルを磨くために読む必要がある本をお勧めすることができます、私はそれが好きではない!とにかく、豊かな経験を共有してくれてありがとう! –

+0

@EliranLevi。 。 。もちろん書いている本をお勧めします。しかし、私はスタックオーバーフローでそれらを宣伝しません。あなたはAmazonのようにウェブ上の他の場所を見ることができます。 –

関連する問題