我有以下格式的数据:
国家
lang | code | name ========================== EN 1001 Italy IT 1001 Italia RO 1001 Italia AL 1001 Itali TR 1001 Italya -------------------------- EN 1002 Greece RO 1002 Grecia AL 1002 Greqi TR 1002 Yunanistan -------------------------- EN 1003 Romania AL 1003 Rumani TR 1003 Romanya --------------------------
我想选择所有名称,但还要多一列,在其中我会以特定语言(例如EN)列出该国家(具有相同代码)的名称。
我要打印此表:
lang | code | name | name_EN =================================== EN 1001 Italy Italy IT 1001 Italia Italy RO 1001 Italia Italy AL 1001 Itali Italy TR 1001 Italya Italy ----------------------------------- EN 1002 Greece Greece RO 1002 Grecia Greece AL 1002 Greqi Greece TR 1002 Yunanistan Greece ----------------------------------- EN 1003 Romania Romania AL 1003 Rumani Romania TR 1003 Romanya Romania -----------------------------------
我尝试使用自连接,但没有成功。
SELECT t1.lang AS lang , t1.code AS code , t1.name AS name , t2.name AS name_EN FROM countries t1 INNER JOIN countries t2 ON t2.name = t1.name AND t2.lang = 'EN'
从该查询中,我仅获得lang EN中的名称;每个国家1个名称。
lang | code | name | name_EN =================================== EN 1001 Italy Italy EN 1002 Greece Greece EN 1003 Romania Romania
如果删除
t2.lang = 'EN'
条件,则新列与现有名称列相同。
我实际上可以使用自我联接获得这种表吗?如果是,如何?
如果无法通过自连接完成此操作,那么在MySql中尝试这样做是否值得(在性能方面),还是我最好以编程方式进行此操作?
您可以在这里进行测试。https://paiza.io/projects/e/oahtrlObx_ctyHBZFnzDvA
我有以下格式的数据:国家/地区:lang |代码名称============================= EN 1001意大利IT 1001 Italia RO 1001 Italia AL 1001 Itali TR 1001 ...
此查询将为您提供所需的结果。它使用自我连接,但仅连接到表中具有lang=EN
的值,并在code
上连接,因此无论当前语言如何,我们都可以获取英文名称: