我有两个正常运行的查询:
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时执行一个SELECT在第一个查询中请求但忽略第二个查询返回的行的查询。
我该怎么做?
谢谢
PD:MarcadaProduccio和ParosMarcadesProduccio表的结构
答案 0 :(得分:1)
您的第一个查询无效,因为未定义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
值时,后者表现得很奇怪。你最好先学会更好的方法。
答案 1 :(得分:0)
使用NOT IN
使用以下方法,只需确保ParosMarcadesProduccio.IDMarcada
永远不会NULL
。
SELECT MarcadaProduccio.ID, 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) and
MarcadaProduccio.ID NOT IN (
--your second query
SELECT ParosMarcadesProduccio.IDMarcada
FROM ParosMarcadesProduccio
WHERE ParosMarcadesProduccio.DescripcioParo LIKE "%MONTAJE%"
)
GROUP BY MarcadaProduccio.ID, MarcadaProduccio.Article
编辑:正如其他人所说,DISTINCT
在您的查询中似乎存在疑问,应该可能已删除。