我有两个可以正常工作的查询:
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 表的结构
最佳答案
您的第一个查询无法工作,因为 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/