mysql - 混合两个sql查询: return what's requested in the first one but ignoring the second one

标签 mysql sql merge inner-join

我有两个可以正常工作的查询:

SELECT DISTINCT MarcadaProduccio.Article, 
                SUM(MarcadaProduccio.Rendiment * MarcadaProduccio.HoresMarcada)/SUM(MarcadaProduccio.HoresMarcada) AS MitjanaPonderada 
FROM MarcadaProduccio 
INNER JOIN MarcadaProduccio ON ParosMarcadesProduccio.IDMarcada = MarcadaProduccio.ID
WHERE   MarcadaProduccio.Article IN (SELECT DISTINCT MarcadaProduccio.Article FROM MarcadaProduccio) 
GROUP BY MarcadaProduccio.Article

SELECT ParosMarcadesProduccio.IDMarcada 
FROM ParosMarcadesProduccio 
WHERE ParosMarcadesProduccio.DescripcioParo LIKE "%MONTAJE%"

我想做的是执行一个查询,该查询根据第一个查询中的请求进行选择,但当 ParosMarcadesProduccio.IDMarcada = MarcadaProduccio.ID 时忽略第二个查询返回的行。

我该怎么做?

谢谢

PD:MarcadaProduccio 和 ParosMarcadesProduccio 表的结构

Main table Aux table

最佳答案

您的第一个查询无法工作,因为 ParosMarcadaProduccio 未定义。您可以将查询简化为如下所示:

SELECT mp.Article, SUM(mp.Rendiment * mp.HoresMarcada) / SUM(mp.HoresMarcada) AS MitjanaPonderada 
FROM MarcadaProduccio mp INNER JOIN
     ParosMarcadaProduccio pmp
     ON pmp.IDMarcada = mp.ID
WHERE mp.Article IN (SELECT mp2.Article FROM MarcadaProduccio mp2) 
GROUP BY mp.Article;

请注意,不需要 SELECT DISTINCT

SELECT mp.Article, SUM(mp.Rendiment * mp.HoresMarcada) / SUM(mp.HoresMarcada) AS MitjanaPonderada 
FROM MarcadaProduccio mp INNER JOIN
     ParosMarcadaProduccio pmp
     ON pmp.IDMarcada = mp.ID
WHERE mp.Article IN (SELECT mp2.Article FROM MarcadaProduccio mp2) AND
      NOT EXISTS (SELECT pmp.IDMarcada
                  FROM ParosMarcadaProduccio pmp2
                  WHERE pmp2.DescripcioParo LIKE '%MONTAJE%' AND
                        pmp.IDMarcada = mp.id
                 )
GROUP BY mp.Article;

在学习使用子查询进行过滤时,我强烈建议使用 NOT EXISTS 而不是 NOT IN。当子查询返回 NULL 值时,后者的行为很奇怪。你不妨先学习一下更好的方法。

关于mysql - 混合两个sql查询: return what's requested in the first one but ignoring the second one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46909449/

相关文章:

sql - 执行相同的查询两次,但使用单个不同的 WHERE 子句

java - 如何从一个单元格检查所有可到达的单元格

python - 如何根据三列中的顺序将三列合并为一列

svn - 合并后分支上提交日志会发生什么?

PHP COUNT 并跳过所有其他记录

mysql - SQL 查询获取错误的行

sql - 警告 : Null value is eliminated by an aggregate or other SET operation in Aqua Data Studio

sql - 使用GORM在Grails中使用一对多引用有效地检索对象

mysql - 无法连接到部署到 CloudBees 的应用程序上的主机 MySQL 数据库

php - 以编程方式处理 'transaction'