Simple Group By

Désolé pour cette question simple, mais il me manque la forêt à travers les trees.

Ce sont mes tables (j'ai quitté la table des pièces détachées car je ne cherche que deux fk spéciaux): alt text http://www.bilder-hochladen.net/files/4709-kx.jpg

J'ai besoin des lignes distinctes de tabData qui sont référencées dans la table-enfant tabDataDetail avec fiSparePart = 8837 et 8969. Ce qui suit ne me donne que les lignes qui ont au less une pièce de rechange, mais j'ai besoin de celles qui ont les deux. Ils ne sont pas non plus distincts, à cause de la clause having.

SELECT tabData.idData FROM tabData INNER JOIN tabDataDetail ON tabData.idData = tabDataDetail.fiData GROUP BY tabData.idData, tabDataDetail.fiSparePart HAVING tabDataDetail.fiSparePart IN (8837, 8969) ORDER BY tabData.idData 

Merci pour votre time.

Cela devrait vous donner les loggings tabData qui ont à la fois 8837 et 8969 comme pièces de rechange. Vous pouvez utiliser DISTINCT et vous n'avez pas besoin du groupe.

 SELECT DISTINCT tabData.idData FROM tabData WHERE EXISTS (SELECT * FROM tabDataDetail WHERE tabData.idData = tabDataDetail.fiData AND tabDataDetail.fiSparePart = 8837) AND EXISTS (SELECT * FROM tabDataDetail WHERE tabData.idData = tabDataDetail.fiData AND tabDataDetail.fiSparePart = 8969) ORDER BY tabData.idData 

Essaye ça

 SELECT tabData.idData FROM tabData INNER JOIN tabDataDetail ON tabData.idData = tabDataDetail.fiData WHERE tabDataDetail.fiSparePart IN (8837, 8969) GROUP BY tabData.idData, tabDataDetail.fiSparePart HAVING COUNT(distinct tabDataDetail.fiSparePart ) > 1 ORDER BY tabData.idData 

Voici un exemple

 create table #bla (idData int, fiSparePart int) insert #bla values(1,8837) insert #bla values(1,8969) insert #bla values(2,8837) insert #bla values(2,8837) insert #bla values(2,8837) SELECT idData FROM #bla WHERE fiSparePart IN (8837, 8969) GROUP BY idData HAVING COUNT(distinct fiSparePart) > 1 

Vous n'avez pas besoin de deux tables pour cela, si tout ce que vous obtenez de tabData est la key primaire (qui existe aussi dans tabDataDetail en tant que key étrangère). Cela suppose que tabData est une table parent de tabDataDetail.

 SELECT a.fiData FROM (SELECT fiData FROM tabDataDetail WHERE fiSparePart = 8837) a INNER JOIN (SELECT fiData FROM tabDataDetail WHERE fiSparePart = 8969) b ON a.fiData = b.fiData 
  SELECT tabData.idData FROM tabData INNER JOIN tabDataDetail ON tabData.idData = tabDataDetail.fiData WHERE tabDataDetail.fiSparePart IN (8837, 8969) GROUP BY tabData.idData, tabDataDetail.fiSparePart ORDER BY tabData.idData