我的db表是这样的:
> routes – 路由表,包含列:
一个. destination_id b. departure_id
> destinations – 所有目标的表,包含列:
一个. destination_id b. DESTINATION_NAME.
因为每个目的地也是出发点,我使用一个表.
关系如下:1. routes.destination_id = destinations.destination_id,也是2. routes.departure_id = destinations.destination_id
我需要的结果如下所述:
如果routes.destination_id = 3和routes.departure_id = 5,我想将它们中的每一个与目的地表中的对应名称相匹配,并在结果中输入正确的列名,对于出发我想称之为departure_city和相同目的地.现在我得到了两个不同ID的相同名称,所以如果destination_id#3是纽约,而destination_id#5是拉斯维加斯,那么我将同时获得纽约,这不是我需要的.
到目前为止,我的查询看起来像这样:
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之前,我已经使用JOIN完成了但是无法更改列名!此外,我总是收到所有表的列,我不知道如何只用JOIN获得必要的列!
现在我的问题是我无法从目的地获取两次值,一次是route_destination,另一次是route_departure,并显示不同的值.
最佳答案 您正在寻找两个连接:
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语法.
>不要使用单引号来定义列别名.仅对字符串和日期常量使用单引号.如果使用需要引用的名称,则使用反引号(然后,更改名称,以便不需要反引号).