MySql - 将多个表连接到主表时出现重复列

标签 mysql sql left-join

背景
我收到了一堆如下所示的数据,宽度略多于 200 列: 名称|地址|等...|值 1|值 2|代码 1|代码 2|代码重复 7 次|值 3|值重复 200 次...|值 200

它们包括用于破译编码值的定义列表,例如:U6 = 本地限制和 U7 = 超过 100 次

所以我将其加载到 mysql 中,因为他们想要将定义列表中的值交换为编码值的报告。然而,并非主表中的所有单元格都有数据,有些单元格是空白的。

问题
所以,当构建我的 select 语句时,我通常会使用左连接并且没问题,但是我需要多个左连接来在需要时交换 8 个定义列表,多个左连接给了我很多额外的字段,在这个。

主表被称为
RAW_数据

保存所有定义列表的表被命名为:
国家
起源
语言
偏好
HAS_VEHICLE
教育
婚姻状况
职业
科技码
类型
收入

上面这些表格只是有定义的表格。 225 表中的所有其他字段都是静态的并且通常是唯一的。我确信它可以标准化,但一次转换一份报告需要付出大量的努力。这就是为什么我只使用那些具有人类无法通过定义列表识别的代码的代码。

MY QUERY  

SELECT `raw_data`.`id_raw_data`,
    `raw_data`.`id`,
    `raw_data`.`first_name`,
    `raw_data`.`last_name`,
    `raw_data`.`OTHER_COLUMNS_AS_NEEDED`,
    `country`.`longname` as `country`,
    `origin`.`longname` as `origin`,
    `language`.`longname` as `language`,
    `preference`.`longname` as `preference`,
    `has_vehicle`.`longname` as `vehichle_type`,
    `education`.`longname` as `education`,
    `marital_status`.`longname` as `marital_status`,
    `occupation`.`longname` as `occupation`,
    `techcode`.`longname` as `tech_group`,
    `typestat`.`longname` as `typecode`,
    `income`.`longname` as `income`,
FROM `raw_data` 
left join `country`
    on `raw_data`.`countrycode` = `country`.`shortname`
left join `origin`
    on `raw_data`.`origincode` = `origin`.`shortname`
left join `language`
    on `raw_data`.`languagecode` = `origin`.`language`
left join `preference`
    on `raw_data`.`preferencecode` = `preference`.`shortname`
left join `has_vehicle`
    on `raw_data`.`has_vehiclecode` = `has_vehicle`.`shortname`
left join `education`
    on `raw_data`.`educationcode` = `education`.`shortname`
left join `marital_status`
    on `raw_data`.`marital_statuscode` = `marital_status`.`shortname`
left join `occupation`
    on `raw_data`.`occupationcode` = `occupation`.`shortname`
left join `techcode`
    on `raw_data`.`techcodecode` = `techcode`.`shortname`
left join `typecode`
    on `raw_data`.`typestatcode` = `typestat`.`shortname`
left join `income`
    on `raw_data`.`incomecode` = `income`.`shortname`

我做了一些搜索,似乎都使用某种形式的子查询或涉及连接回自身的问题。我很确定这与大量 raw_data 表中没有值的列有关,因此没有匹配项,但需要帮助。

这看起来很接近,但是如果已经有太多连接,我的查询就会超时,这对于我的所有查找来说似乎需要更多工作: Removing duplicates from result of multiple join on tables with different columns in MySQL

感谢您的帮助,

大卫

最佳答案

万一其他人想知道,我发现问题根本不在于 sql,这对我的目的来说工作得很好。

相反,定义表中的数据具有一些不唯一的值,因此在定义了重复定义的情况下,结果会返回额外的行。

关于MySql - 将多个表连接到主表时出现重复列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26879975/

相关文章:

sql - 如果一个或多个表中可能缺少该键,您能否在同一个键上连接三个表?

sql - MySQL LEFT JOIN 中的多个变量

javascript - 在javascript中进行左外连接

mysql - 使用 WHERE NOT EXISTS 进行 SQL 查询时出错

sql - 如何创建在日期更改时更新的 SQL 表

sql - Oracle SQL 中的这 2 个左连接之间有区别吗?为什么

mysql - 对于远程 MySql 数据库的 MS Access 只读

php - 防止 PHP 输出左连接中显示重复记录

mysql - SQL 查询第 n 个最新更新

mysql - 更好的子查询方式