【问题标题】:How to replace multiple columns in one SQL query?如何在一个 SQL 查询中替换多个列?
【发布时间】:2021-09-12 22:08:54
【问题描述】:

我有 2 张桌子:countrytrip

一次旅行最多可以有 3 个国家/地区代码。

国家/地区

country_code country_name
FRA FRANCE
IRL IRELAND
JPN JAPAN
MAR MOROCCO
NZL NEW ZEALAND

行程

trip_id country_code country_code2 country_code3
1 FRA IRL JPN
2 MAR NZL

我的目标是在行程表上显示国家名称而不是国家代码。

多亏了左连接子句,我成功地只替换了 1 个国家/地区代码。我希望每行最多显示 3 个国家/地区名称。

SELECT trip_id, country_name
FROM trip
LEFT JOIN country ON country_code = country_name

行程表的实际输出:

trip_id country_name
1 FRANCE
2 MOROCCO

有没有办法将每个国家代码替换为其对应的国家名称?

trip 表中查询的预期输出:

trip_id country_name country_name2 country_name3
1 FRANCE IRELAND JAPAN
2 MOROCCO NEW ZEALAND

谢谢!

【问题讨论】:

    标签: sql left-join


    【解决方案1】:

    您可以再添加两个连接

    SELECT trip_id, c1.country_name, c2.country_name, c3.country_name
    FROM trip t
    left join 
    country c1
    on t.country_code = c1.country_code
    left join 
    country c2
    on t.country_code2 = c2.country_code
    left join 
    country c3
    on t.country_code3 = c3.country_code
    

    【讨论】:

    • 伙计,这就是答案!非常感谢!我不敢相信你很快就做到了!
    • @Stan 。 . .如果这回答了问题,您应该接受答案。
    【解决方案2】:

    完成此查询的最简洁方法是使用子查询:

    SELECT t.trip_id, 
           (SELECT country_name FROM country WHERE country_code =  t.country_code) "c1",
           (SELECT country_name FROM country WHERE country_code = t.countty_code2) "c2",
           (SELECT country_name FROM country WHERE country_code = t.country_code3) "c3"
    FROM trip t
    

    【讨论】:

    • 对于很多行,这将是一个非常缓慢的解决方案
    • 非常感谢,Gonnen!它完美无缺!我喜欢这个查询的结构。很干净:)
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多