Here is one way, if you need to deal with duplicates (hopefully not) then you will have to adjust the query a bit:DECLARE @A TABLE (Aid VARCHAR(5), Aname VARCHAR(10))INSERT @A (Aid, Aname) VALUES('Aid1', 'Aname1'),('Aid2', 'Aname2'),('Aid3', 'Aname3'),('Aid4', 'Aname4'),('Aid5', 'Aname5')DECLARE @B TABLE (Bid VARCHAR(5), Bname VARCHAR(10))INSERT @B (Bid, Bname) VALUES('Bid1', 'Bname1'),('Bid2', 'Bname2'),('Bid3', 'Bname3'),('Bid4', 'Bname4'),('Bid5', 'Bname5')DECLARE @AB TABLE (Aid VARCHAR(5), Bid VARCHAR(5))INSERT @AB (Aid, Bid) VALUES('Aid1', 'Bid2'),('Aid2', 'Bid2'),('Aid2', 'Bid3'),('Aid2', 'Bid4'),('Aid2', 'Bid5'),('Aid3', 'Bid2'),('Aid3', 'Bid4'),('Aid4', 'Bid1'),('Aid5', 'Bid2'),('Aid5', 'Bid3'),('Aid5', 'Bid4 ')SELECT AB.AidFROM @A AS AINNER JOIN @AB AS AB ON A.Aid = AB.AidWHERE AB.Bid IN ('Bid2', 'Bid3', 'Bid4')GROUP BY AB.AidHAVING COUNT(*) = (SELECT COUNT(*) FROM @B WHERE Bid IN ('Bid2', 'Bid3', 'Bid4'))