SELECT JOIN在一行中包含多行的两个表



我从swizerland的帖子中得到了一个CSV文件,其中包含所有地址。对于用例,我们只需要大约10%的includet数据。我现在尝试合并并删除不需要的数据。瑞士使用3种不同的语言来命名一些城市/街道。主表总是包括城市的口语。在第二个表中,有一行用于第二种语言,第二行用于第三种语言。

最后,我想要这样的输出:

PID | ZIP_CODE | DE_CITY | FR_CITY | IT_CITY

我的查询如下:

SELECT
NEW_PLZ1.ONRP,
case
when NEW_PLZ1.SPRACHCODE = '1' then NEW_PLZ1.ORTBEZ18
when NEW_PLZ2.SPRACHCODE = '1' then NEW_PLZ2.ORTBEZ18
end as 'DE_CITY',
case
when NEW_PLZ1.SPRACHCODE = '2' then NEW_PLZ1.ORTBEZ18
when NEW_PLZ2.SPRACHCODE = '2' then NEW_PLZ2.ORTBEZ18
end as 'FR_CITY',
case
when NEW_PLZ1.SPRACHCODE = '3' then NEW_PLZ1.ORTBEZ18
when NEW_PLZ2.SPRACHCODE = '3' then NEW_PLZ2.ORTBEZ18
end as 'IT_CITY'
FROM
NEW_PLZ1
LEFT JOIN NEW_PLZ2 ON NEW_PLZ1.ONRP = NEW_PLZ2.ONRP;

ONRP是两个表中的主键和FK。SPRACHCODE是1表示德语,2表示法语,3表示意大利语。

通过上面的查询,我得到了我想要的结果——但一种语言总是一个单独的行(因为有2行的联接表(

然后我尝试使用GROUP BY ONRP,但出现以下错误:

[42000][1055]SELECT列表的表达式#2不在GROUP BY子句中,并且包含非聚合列"adressen.NEW_PLZ2.SPRACHCODE",该列在功能上不依赖于GROUP BY子句的列;这与sql_mode=only_full_group_by 不兼容

我在stackoverflow上发现了以下内容:-禁用严格模式:这对执行查询起到了作用。但是结果并不好。(数据缺失,数据错误(-在GROUP BY中添加所有已使用的字段这也适用于执行查询。但也有缺失数据或错误数据。

有时我的创造力被打破了,尝试如何解决这个问题。我不知道还有什么关键词可以在这里搜索,这对我有帮助。

我很乐意为您提供以下建议:通过以及为什么它不起作用,或者如何以其他方式查询希望的输出,来解决我对小组的脑筋急转弯。

重要提示:查询将不在生产环境中。它将仅用于使用needet数据创建新的数据库/表。

非常感谢的帮助

使用聚合函数

当然,你必须测试不同的功能,直到你得到你的结果

SELECT
NEW_PLZ1.ONRP,
MAX(case
when NEW_PLZ1.SPRACHCODE = '1' then NEW_PLZ1.ORTBEZ18
when NEW_PLZ2.SPRACHCODE = '1' then NEW_PLZ2.ORTBEZ18
end) as 'DE_CITY',
MAX(case
when NEW_PLZ1.SPRACHCODE = '2' then NEW_PLZ1.ORTBEZ18
when NEW_PLZ2.SPRACHCODE = '2' then NEW_PLZ2.ORTBEZ18
end) as 'FR_CITY',
MAX(case
when NEW_PLZ1.SPRACHCODE = '3' then NEW_PLZ1.ORTBEZ18
when NEW_PLZ2.SPRACHCODE = '3' then NEW_PLZ2.ORTBEZ18
end) as 'IT_CITY'
FROM
NEW_PLZ1
LEFT JOIN NEW_PLZ2 ON NEW_PLZ1.ONRP = NEW_PLZ2.ONRP
GROUP BY NEW_PLZ1.ONRP;

相关内容

最新更新