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

时间:2014-11-12 05:35:38

标签: mysql sql left-join

背景
我得到了一堆看起来像这样的数据,宽度超过200列: 姓名|地址|等等... |值1 |值2 |代码1 |代码2 |代码重复7次|值3 |重复200次值... |值200

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

所以我把它加载到mysql中,因为他们想要报告交换Coded Values的定义列表中的值。但是,主表中的所有单元格都没有数据,有些是空白的。

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

主表称为
    RAW_DATA

并且包含所有定义列表的表名称为:
        国家
    ORIGIN
    语言
    偏好
    HAS_VEHICLE
    教育
    MARITAL_STATUS
    占领
    TECHCODE
    TYPE
    收入

上面的这些表只是那些有定义的表。 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

感谢您的帮助,

大卫

1 个答案:

答案 0 :(得分:0)

如果其他人想知道,我发现问题根本不在于sql,这对我来说很好。

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