MySQL将同一行中不同列上的两个表连接起来

MySQL将同一行中不同列上的两个表连接起来,mysql,inner-join,between,Mysql,Inner Join,Between,我将连接两个目标相同但原点值不同的表。我肯定我不擅长用语言解释。但希望您能通过下面的代码得到我想要的: MySQL 时间表船 选项\u位置\u数据库 根据时间表和船表。我期望: 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

我将连接两个目标相同但原点值不同的表。我肯定我不擅长用语言解释。但希望您能通过下面的代码得到我想要的:

MySQL

时间表船

选项\u位置\u数据库

根据时间表和船表。我期望:

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”列与时间表不匹配。des=选项\u位置\u db=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
试试这个

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
试试这个:

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
您需要从表选项\u places\u db中获得两个不同的名称,因此需要将其联接两次。第一次检索源名称,第二次检索目标名称。 您可以看到,您使用相同的表作为起点和终点,您只需将它们链接两次,并给它一个临时名称以区分您得到的响应

编辑:已更正查询

请尝试以下操作:

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
您需要从表选项\u places\u db中获得两个不同的名称,因此需要将其联接两次。第一次检索源名称,第二次检索目标名称。 您可以看到,您使用相同的表作为起点和终点,您只需将它们链接两次,并给它一个临时名称以区分您得到的响应


编辑:更正了查询

是否需要创建另一个名为“des_places”的表?否,您只需为选项_places_db指定不同的别名即可。其中一个用于原点,另一个用于目标。是否需要创建另一个名为“des_places”的表?不,您只需为选项_places_db指定不同的别名。其中一个用于来源,另一个用于目的地。您的解决方案似乎有效,但1054-未知列“time\u table\u boat.dest”在“on”子句中“谢谢。是的,您是对的,抱歉,已写入。目的地在检查您选择的名称之前,忘记了t。接得好!您的解决方案似乎有效,但1054-未知列“time\u table\u boat.dest”在“on子句”中表示感谢。是的,您是对的,抱歉,已经写了。在检查您选择的名称之前,目的地忘记了t。接得好!