通过sql查询合并非空白结果字段

时间:2013-10-28 13:50:52

标签: mysql sql join distinct

让我知道我有一个复杂的查询,它从大量表中获取数据。

    SELECT
    DISTINCT
        table1.hash, 
        table2.field1,
        table3.field1,
        table4.field1, 
...
...
...
    FROM table1
    inner JOIN table2
    ON table1.hash=device_model.hash 
        and table1.date = table2.date 
        and table1.time = table2.time

...
...
...
    inner JOIN table_n-1
    ON table1.hash=table_n-1.hash 
        and table1.date = table_n-1.date 
        and table1.time = table_n-1.time
    left JOIN table_n
    ON table1.hash=table_n.hash 
        and table1.date = table_n.date 
        and table1.time = table_n.time
...
...
...
    ORDER BY table1.date

感谢“DISTINCT”运算符,我得到了三行的结果,如

+---------+----------+------------+
|value1   |Null      | value3     |
+---------+----------+------------+ 
|value1   |Null      | Null       |
+---------+----------+------------+ 
|value1   |value2    | null       |
+---------+----------+------------+ 
|value1   |Null      | value3     |
+---------+----------+------------+ 

所以每行至少有一个Null。 如何合并一行中的选择结果以获取所有数据? 我希望看到像这样的人:

+---------+----------+------------+ 
|value1   |value2    | value3     |
+---------+----------+------------+

显然,第一行的value3等于最后一行的value3。 因此,结果行只有Null的不同。

1 个答案:

答案 0 :(得分:4)

您要求的是分组和使用max聚合函数的问题。假设你有这个表(你的查询很大,可以在这里粘贴:):

+---------+---------+----------+------------+
|hash     |field1   |field2    | field3     |
+---------+---------+----------+------------+
|hash01   |value1   |Null      | value3     |
|hash01   |value1   |Null      | Null       |
|hash01   |value1   |value2    | null       |
|hash01   |value1   |Null      | value3     |
+---------+---------+----------+------------+

您可以按哈希列进行分组,并在其余部分上应用max。这样{} 1}优先于字段2中的value2,而null将优先于字段3中的value3。在此示例中,对于相同的哈希,有2 null。因此value3函数仍然有效。如果同一列中的同一个哈希值有2个不同的值,那么您应该说明要对它们执行的操作,因为在结果中只能选择一个(基于您的示例)。

因此,对上述结果的查询将类似于:

max

将此应用于您的示例,很可能意味着您必须删除select hash, max(field1) as field1, max(field2) as field2, max(field3) as field3 group by hash 子句并按照我在简化示例中所做的相同方式选择/分组结果。