2

目的地が同じで起点の値が異なる 2 つのテーブルを結合します。確かに言葉で説明するのは苦手だ。しかし、うまくいけば、以下のコードで私が望むものを手に入れることができます:

MySQL

SELECT 
option_places_db.plc_en AS from_en, 
option_places_db.plc_th AS to_en, 
concat( time_start_hr, ':', time_start_min ) AS time1, 
concat( time_end_hr, ':', time_end_min ) AS time2, 
price_adult, 
price_child
FROM `time_table_boat`
INNER JOIN option_places_db ON time_table_boat.org = option_places_db.plc_id
ORDER BY time_table_boat.org ASC

time_table_boat ここに画像の説明を入力

option_places_db

ここに画像の説明を入力

time_table_boat テーブルによる。私が期待する :

from_en    to_en     time1    time2    price_adult    price_child
Aonang     Phi Phi   09:00    11:00    450            350
Phi Phi    Aonang    15:30    17:00    450            350

しかし、mySQL を実行すると、代わりに次のようになりました。 ここに画像の説明を入力

列「to_en」は、本来あるべき time_table_boat.des=option_places_db (=3) と一致しません。内部結合の行をさらに追加しようとしましたが、同じ宛先テーブル名のエラーが発生します。

4

2 に答える 2

3

これを試して

SELECT 
    org_places.plc_en AS from_en, 
    des_places.plc_en AS to_en, 
    CONCAT( time_start_hr, ':', time_start_min ) AS time1, 
    CONCAT( time_end_hr, ':', time_end_min ) AS time2, 
    price_adult, 
    price_child
FROM `time_table_boat`
INNER JOIN 
    option_places_db AS org_places ON time_table_boat.org = org_places.plc_id
INNER JOIN 
    option_places_db AS des_places ON time_table_boat.des = des_places.plc_id
ORDER BY time_table_boat.org ASC
于 2012-11-15T08:40:36.757 に答える
1

これを試して :

SELECT
placeOrg.plc_en AS from_en, 
placeDes.plc_th AS to_en, 
concat( time_start_hr, ':', time_start_min ) AS time1, 
concat( time_end_hr, ':', time_end_min ) AS time2, 
price_adult, 
price_child
FROM `time_table_boat`
INNER JOIN option_places_db AS placeOrg ON time_table_boat.org = placeOrg.plc_id
INNER JOIN option_places_db AS placeDes ON time_table_boat.des= placeDes.plc_id
ORDER BY time_table_boat.org ASC

テーブル option_places_db から 2 つの異なる名前が必要なため、2 回結合する必要があります。1 回目は発信元名を取得し、2 回目は宛先名を取得します。出発地と目的地に同じテーブルを使用していることがわかります。それらを 2 回リンクし、取得する応答を区別するために一時的な名前を付けます。

編集:クエリを修正しました

于 2012-11-15T08:42:15.700 に答える