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 WHERE 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
Но мога да имам безкраен брой b.ids. Така че тази заявка ще стане наистина бавна...
Няма ли нещо като IN
, което се държи както искам? И трябва да се реализира с помощта на Criteria Query:
Join<A, B> aB = root.join(A_.bs); // as this is a @ManyToMany relationship
...
Но бих се радвал и на чисто SQL решение.