Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从具有重复值的表中返回所需结果的查询_Mysql_Sql_Select_Join - Fatal编程技术网

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

Mysql 从具有重复值的表中返回所需结果的查询,mysql,sql,select,join,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

我们有两张桌子:

顾客:

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 |
自定义\u字段\u值:

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   |
+------------+----------------+-------+
同一客户可以在自定义字段值表中有多条记录。例如,i_自定义_字段14和16

我需要检索一份报告,该报告返回所有客户唯一名称和自定义字段值。值仅适用于带有编号为16、17、18的自定义字段的记录


如果客户没有在(16,17,18)中包含i_自定义_字段的记录,只需将其值替换为空字符串。

如果为同一客户找到在(16,17,18)中包含i_自定义_字段的多行,则该值将汇总为输出值

这是解决办法

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

您可以尝试这样的左连接:

SELECT c.name, cfv.value 
FROM customer c 
LEFT JOIN Customer_Field_Values cfv
ON c.i_customer = cfv.i_customer
AND cfv.i_custom_field > 15
AND cfv.i_custom_field < 19;
选择c.name,cfv.value
来自客户c
左连接客户\字段\值cfv
在c.i_客户上=cfv.i_客户
和cfv.i_自定义_字段>15
和cfv.i_自定义_字段<19;

如何为每个所需的自定义字段使用
左联接
呢?如果客户在自定义字段中有多行值,而i\u自定义字段在(16,17,18)中,该如何处理?其他匹配的情况如何??是否应该丢失其他数据?