MySQL - 如何合并所有类似的行(只有cols为NULL)

时间:2017-09-15 09:09:54

标签: mysql merge phpmyadmin

拥有来自不同来源的经过解析的经纪人名称的大表。我想按名称标准合并所有数据,以摆脱重复,并统一每个经纪人的相关信息 源表'经纪人的结构':

<xs:schema>
    <xs:element name="MyRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="SubReq">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="list" minOccurs="0" maxOccurs="unbounded">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string" />
                                </xs:simpleType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    ...
</xs:schema>

我想得到的结果是:

id|name|website|logo|year|origin|offices|employess|languages|phone|address|

56|AxiTrader|www.axitrader.com| empty |2010| UK |empty |120|English|06546584|empty|
36|AxiTrader|www.axitrader.com|logo.png|2010|empty|Head|empty|empty|empty|Ave 13|

因此,我想将所有行合并为具有相同名称的空列。 附:在当前表格中,我有~130列,因此列出每个列表都不是很好的变种。

我想做什么(SQL查询):

56|AxiTrader|www.axitrader.com|logo.png|2010|UK|Head|120|English|06546584|Ave 13|

但结果是,我选择了具有MAX值的行,但这些行仍未合并,只是没有重复的行。

已更新

表格结构:

SELECT id, MAX(name), MAX(website), MAX(logo), MAX(year), MAX(origin), MAX(offices), MAX(employees),
MAX(languages),
MAX(phone),
MAX(address),
MAX(types),
MAX(platforms),
...........
FROM brokers
GROUP BY name

1 个答案:

答案 0 :(得分:0)

我的理解是你想基于SELECT查询创建一个新表。 SELECT查询本身就是这样 - 选择并返回你想要的数据 - 它不会改变你的表。你需要明确地创建它:

CREATE TABLE merged_table
  AS (SELECT id, MAX(name) name, MAX(website) website, 
                 MAX(logo) logo, MAX(year) year 
                 .....
      FROM brokers
      GROUP BY name);

见这里:

http://sqlfiddle.com/#!9/d22afa/2