从具有重复值的表返回所需结果的查询

时间:2016-03-10 09:32:56

标签: mysql sql select join

我们有两张桌子:

客户:

select name, i_customer from Customers limit 5;

| Western Refinishers (Pty) Ltd             |       2265 |
| Westonaria Motor Investments (Pty) Ltd    |       1949 |
| Wild Break 1479 cc                        |       1225 |
| Workshop On Wheels (Pty) Ltd              |       2582 |
| Wynberg Panelbeaters And Spray Painters   |       2471 |

Custom_Field_Values:

select i_customer, i_custom_field, value
from Custom_Field_Values
where i_custom_field in (14,15,16,17,18) limit 5;

+------------+----------------+-------+
| i_customer | i_custom_field | value |
+------------+----------------+-------+
|         64 |             14 | 101   |
|        321 |             14 | 101   |
|        321 |             16 | 2233  |
|       1519 |             14 | 102   |
|       1529 |             14 | 102   |
+------------+----------------+-------+

同一客户可以在Custom_Field_Values表中拥有多条记录。例如,使用i_custom_field 14和16。

我需要检索一个报表,该报表仅返回i_custom_field编号为16,17,18的记录的所有客户唯一名称和Custom_Field_Values.values。

如果客户在(16,17,18)中没有i_custom_field的记录,只需用空字符串替换它的值。

2 个答案:

答案 0 :(得分:0)

如果为同一客户找到了(16,17,18)中带有i_custom_field的多行,则该值将总计为输出值。

这是解决方案。

SELECT 
    c.name, COALESCE( SUM(v.value), '') value
FROM 
    Customers c LEFT JOIN Custom_Field_Values v USING(i_customer)
WHERE 
    v.i_custom_field IN (16, 17, 18)
GROUP BY 
    c.name

答案 1 :(得分:0)

您可以尝试这样的LEFT JOIN:

class EndUser(models.Model):
    username = models.CharField(max_length=20)
    password = models.CharField(max_length=30)
    full_name = models.CharField(max_length=100)
    creation_date = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)