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 AND 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 解决方案感到满意。
最佳答案
在 MySQL 上测试:
select TableA.id, count(*)
from tableA
join tableA_B on TableA.id=TableA_B.a_id
where b_id =1 or b_id=2
group by tableA.id
having count(*)=2
关于java - SQL/条件查询包含全部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20505168/