Table A: Table A_B: Table B:
id | a a_id | b_id id | b
------ ----------- ------
1 | w 1 | 1 1 | s
2 | x 1 | 2 2 | t
3 | y 2 | 4 3 | u
4 | z 4 | 4 4 | v
Теперь я хотел бы иметь ВСЕ записи из таблицы A, ГДЕ B.id = 1 И B.id = 2.
На данный момент у меня есть следующий код:
SELECT *
FROM A a
JOIN A_B ab ON a.id = ab.a_id
JOIN B b ON ab.b_id = b.id
И тут я застрял. WHERE b.id IN (...)
дает мне все записи из таблицы A, ГДЕ b.id = 1 OR b.id = 2
конечно, а WHERE b.id = 1 AND b.id = 2
вообще не дает результатов...
Единственное возможное решение, которое я нашел, это использование INTERSECT
:
SELECT *
FROM A a
JOIN A_B ab ON a.id = ab.a_id
JOIN B b ON ab.b_id = b.id
WHERE b.id = 1
INTERSECT
SELECT *
FROM A a
JOIN A_B ab ON a.id = ab.a_id
JOIN B b ON ab.b_id = b.id
WHERE b.id = 2
Но у меня может быть бесконечное количество ставок. Так что этот запрос станет очень медленным...
Разве нет чего-то вроде IN
, который ведет себя так, как я хочу? И это должно быть реализовано с помощью Criteria Query:
Join<A, B> aB = root.join(A_.bs); // as this is a @ManyToMany relationship
...
Но я также был бы счастлив с чистым SQL-решением.