mysql - 如何将其他表的数据添加到双单表MySQL查询中?

标签 mysql database join

我有这个功能查询:

SELECT t1.material, t1.totalS, t2.totalH, (t1.totalS + t2.totalH) as producto, t1.fecha_dbfS, t2.fecha_dbfH FROM (SELECT material, STR_TO_DATE(fe_contab, '%d-%m-%Y') AS fecha_dbfS, SUM(impteml) AS TotalS FROM datos WHERE d_h ='S' GROUP BY material) as t1, (SELECT material, STR_TO_DATE(fe_contab, '%d-%m-%Y') AS fecha_dbfH, SUM(impteml) AS TotalH FROM datos WHERE d_h ='H' GROUP BY material) as t2 WHERE t1.material = t2.material and t1.fecha_dbfS >= '$fechai'and t1.fecha_dbfS <= '$fechaf' and t2.fecha_dbfH >= '$fechai' and t2.fecha_dbfH <= '$fechaf'

显示这样的数据(DTR = Material )Query Result

我还有另一个名为 nombre_dtr 的表,它的数据排列如下:

nombre_dtr table data example

我需要将存储在 nombre_dtr 表中的 DTR 名称作为“nombre”添加到第一个表(查询结果)中,使用该表上的 DTR 字段对表上的“material”字段进行数学计算“datos”表,我尝试了左连接和内连接,但没有成功。

任何帮助将不胜感激

最佳答案

实际上,您可以通过使用带有 case 语句的聚合函数和连接表 nombre_dtr 来简化查询,以按每个 material 获取列 nombre

SELECT  d.material,
        n.nombre,
        SUM(CASE WHEN d.d_h = 'S' THEN d.impteml ELSE 0 END) AS TotalS,
        SUM(CASE WHEN d.d_h = 'H' THEN d.impteml ELSE 0 END) AS TotalH,
        SUM(d.impteml) AS producto,
        MAX(CASE WHEN d.d_h = 'S' THEN STR_TO_DATE(d.fe_contab, '%d-%m-%Y') END) fecha_dbfS,
        MAX(CASE WHEN d.d_h = 'H' THEN STR_TO_DATE(d.fe_contab, '%d-%m-%Y') END) fecha_dbfH
FROM    datos d
        INNER JOIN nombre_dtr n
            ON d.material = n.dtr
WHERE   STR_TO_DATE(d.fe_contab, '%d-%m-%Y') >= '$fechai'
        AND STR_TO_DATE(d.fe_contab, '%d-%m-%Y') <= '$fechaf' 
GROUP   BY d.material, n.nombre

这是关于 SQL Join 的指南.

关于mysql - 如何将其他表的数据添加到双单表MySQL查询中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48654939/

相关文章:

查询中的 MySQL 循环变量

php - MySQL - 在多值字段中搜索

java - 无法使用 RMI 客户端从 DBMS 恢复数据

ios - 使用 Objective-C 在 Realm 中捕获写入错误的正确方法是什么?

java - 使用 php for java 创建 webservice(XML)

mysql - 每天数百万新行的数据库架构

Mysql SUM 基于条件

mysql - 在 SQL 的 where 子句中使用别名

php - 使用正则表达式的复杂 SQL 查询

mysql 合并多个连接