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

时间表船 在此处输入图像描述

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 中的两个不同名称,因此您需要将其加入两次。第一次检索源名称,第二次检索目的地名称。您可以看到您使用同一个表作为起点和终点,您只需将它们链接两次,然后给它一个临时名称以区分您得到的响应。

编辑:更正了查询

于 2012-11-15T08:42:15.700 回答