我是 sql 的新手,正在为语句而苦苦挣扎。为简单起见,假设我有两个表 - 表 - JourneyOrder 和表 - ItemsToBuy。
JourneyOrder 包含城市列表、旅程中特定城市的索引以及谁正在旅行。 所以:
City Index Name
London 1 John
Sydney 2 John
Paris 3 John
Berlin 1 Jack
Paris 2 Jack
另一个表包含要购买的元素列表,包含位置(如在城市)、需要购买元素的人员以及元素的不同特征。
Item Location Weight Price Responsible
Pencil London 1 2 John
Glue London 2 5 John
Car Paris 1000 12000 John
Wallet Paris 3 20 Jack
我想选择一个特定的人需要购买的所有元素并按地点订购。因此,如果约翰的第一条路线是伦敦,我希望首先显示您可以在伦敦购买的商品。
目前,我可以使用以下内容:
SELECT itb.item, itb.location, itb.price
FROM ItemsToBuy itb,
WHERE itb.responsible = 'John'
ORDER BY CASE
WHEN itb.location = 'London' THEN '1'
WHEN itb.location = 'Sydney' THEN '2'
WHEN itb.location = 'Paris' THEN '3'
现在这显然很糟糕,因为我需要根据每个负责人所经历的旅程按部分“硬编码”订单,我怎样才能做到这一点才能将项目表的位置与旅程表中的城市相匹配并使用索引当这些匹配时从旅程表中。
最佳答案
我想你只是想要一个join
:
SELECT itb.item, itb.location, itb.price
FROM ItemsToBuy itb JOIN
JourneyOrder jo
ON itb.name = jo.name AND itb.location = jo.city
WHERE itb.responsible = 'John'
ORDER BY jo.index;
关于sql - Oracle SQL 查询按不同表中的列值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48808318/