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)中,该如何处理?其他匹配的情况如何??是否应该丢失其他数据?