SELECT JOIN 两张表,一行多行
SELECT JOIN two tables with multible rows in one row
我从瑞士 post 那里得到了一个包含所有地址的 CSV 文件。对于用例,我们只需要大约 10% 的包含数据。我现在尝试合并并删除不需要的数据。
瑞士对某些城市/街道名称使用 3 种不同的语言。主要-table 始终包括来自城市的口语。在第二个 table 中,第二种语言有一行,第三种语言有第二行。
最后我想要这样的输出:
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 是 table 中的主键和 FK。 SPRACHCODE 为德语为 1,法语为 2,意大利语为 3。
通过上面的查询,我得到了我想要的结果——但是一种语言总是单独的一行(因为连接 table 有 2 行)
我尝试使用 GROUP BY ONRP 但出现以下错误:
[42000][1055] SELECT 列表的表达式 #2 不在 GROUP BY 子句中并且包含非聚合列 'adressen.NEW_PLZ2.SPRACHCODE',它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by
不兼容
我在 Whosebug 上发现如下:
-禁用严格模式:
这有助于执行查询。但结果并不好。 (缺失数据,错误数据)
- 在 GROUP BY 中添加所有使用的字段
这也适用于执行查询。但也有缺失数据或错误数据。
Atm 我的创造力被打破了,想试试如何解决这个问题。我不知道我还能在这里搜索哪些关键字对我有帮助。
我很乐意为以下人士提供建议:
解决我的 brainbreaker for the group-by 以及为什么它不起作用或如何以其他方式查询所需的输出。
重要提示:查询不会在生产环境中。它将仅用于使用需要的数据创建新的 database/table。
非常感谢您的帮助
当然你必须测试不同的功能,直到你得到你的结果
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;
我从瑞士 post 那里得到了一个包含所有地址的 CSV 文件。对于用例,我们只需要大约 10% 的包含数据。我现在尝试合并并删除不需要的数据。 瑞士对某些城市/街道名称使用 3 种不同的语言。主要-table 始终包括来自城市的口语。在第二个 table 中,第二种语言有一行,第三种语言有第二行。
最后我想要这样的输出:
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 是 table 中的主键和 FK。 SPRACHCODE 为德语为 1,法语为 2,意大利语为 3。
通过上面的查询,我得到了我想要的结果——但是一种语言总是单独的一行(因为连接 table 有 2 行)
我尝试使用 GROUP BY ONRP 但出现以下错误:
[42000][1055] SELECT 列表的表达式 #2 不在 GROUP BY 子句中并且包含非聚合列 'adressen.NEW_PLZ2.SPRACHCODE',它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by
不兼容我在 Whosebug 上发现如下: -禁用严格模式: 这有助于执行查询。但结果并不好。 (缺失数据,错误数据) - 在 GROUP BY 中添加所有使用的字段 这也适用于执行查询。但也有缺失数据或错误数据。
Atm 我的创造力被打破了,想试试如何解决这个问题。我不知道我还能在这里搜索哪些关键字对我有帮助。
我很乐意为以下人士提供建议: 解决我的 brainbreaker for the group-by 以及为什么它不起作用或如何以其他方式查询所需的输出。
重要提示:查询不会在生产环境中。它将仅用于使用需要的数据创建新的 database/table。
非常感谢您的帮助
当然你必须测试不同的功能,直到你得到你的结果
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;