Одним из подходов является обеспечение того, чтобы каждый transID должен иметь две записи, которые удовлетворяют описанным вами условиям.
SELECT * FROM
TABLE
WHERE TransID IN(
SELECT TransId
FROM table
WHERE ( layerno = 1
AND accountid IN ( 2, 5 ) )
OR ( layerno = 2
AND accountid IN( 3, 6 ) )
GROUP BY
TransId
HAVING Count(*) = 2
)
Однако это может быть проблемой, если у вас может быть несколько записей, где layerno = 1. Таким образом, вы можете использовать вместо этого самостоятельные объединения, чтобы обеспечить критерии.
SELECT DISTINCT a.transid
FROM table a
INNER JOIN table b
ON a.transid = b.transid
INNER JOIN table c
ON a.transid = c.transid
WHERE b.layerno = 1
AND accountid IN ( 2, 5 )
AND c.layerno = 2
AND accountid IN ( 3, 6 )
Тем не менее ИНТЕРСЕКТ Мартина подход, вероятно, лучший