【发布时间】:2014-06-05 13:33:12
【问题描述】:
QUOTES TABLE
-----------------
QUOTE_ID_PK PICKUP_FROM_ID DROPOFF_TO_ID
1 4 3
2 2 3
3 1 1
4 1 2
5 3 2
TOWN TABLE
---------------
TOWN_ID_PK DISTANCE NAME
1 34 South Central
2 43 airport
3 99 bus station
4 66 train station
我有 2 个表格可以计算出一个简单的距离公式。
我需要为订单表中的 ORDER_ID 返回 2 行(带有距离值)。
我得到 order_id =2 ,pickupfromdistance=43,dropoffto=99 的结果。
我已经尝试了这个站点的一些想法,这是我所拥有的几乎可以工作,但不返回第二个距离值的方法。我是不是走错了路?我是否正在为一个简单的问题制定复杂的解决方案?
SELECT town.town_id_pk AS townID, town.distance AS distance, town.name AS townName, town.location AS location, quotes.pickupfrom_id, quotes.dropoffto_id
FROM town, quotes
WHERE quotes.pickupfrom_id=town.town_id_pk
AND quotes.quote_id_pk = '140419420'
UNION ALL
SELECT town.town_id_pk AS townID, town.distance AS distance, town.name AS townName, town.location AS location, quotes.pickupfrom_id, quotes.dropoffto_id
FROM town, quotes
WHERE quotes.dropoffto_id=town.town_id_pk
AND quotes.quote_id_pk = '140419420'";
例如 我正在选择:
QUOTE_ID_PK=2, wh
(PICKUP_FROM_ID=2,DROPOFF_TO_ID=3)
我想要的结果是这样的:
TOWN_ID_PK=2, DISTANCE=43, NAME=AIRPORT
那么下一行将是
TOWN_ID_PK=3, DISTANCE=99, NAME= BUS STATION
一旦我知道哪个距离更远,我就可以继续使用代码来计算每 klm 的费率等(我可以自己计算这部分)。
【问题讨论】:
-
1) 学习使用 JOIN 2) 只有当接送点和下车点与您的基点完全相反时,您的距离才有意义
-
quote_id_pk 未在报价表中列出。您能否列出该表的完整结构(或至少所有相关列)?
-
哇,谢谢你们的快速反应。实际的表格比我上面制作的示例信息要多得多。是的,马克我明白你的意思。我将一个城镇作为“basetown”,然后将其他城镇作为“与基地的距离”......所以当用户输入从 TOWN A 到 TOWN B 的搜索时,sql 将在数据库中查找以检查任一城镇都是 BASETOWN,然后根据最长距离计算出从那里的距离和成本
-
修正了上面显示 quote_id_pk joseph 的表格。
-
您原来的 UNION ALL 方法似乎工作正常。请参阅此小提琴 - sqlfiddle.com/#!2/8dbd3/4 请确保 quote_id_pk 是 varchar(因为您已将 140419420 括在单引号中)。