java - SQL/条件查询包含全部?

标签 java sql criteria contains criteria-api

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

SQL Fiddle here .

关于java - SQL/条件查询包含全部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20505168/

相关文章:

mysql - 每 1 小时自动通过 SSH 隧道对远程 mysql 服务器运行一次 select 语句

sql - 删除数据库中的重复行而不使用 rowid 或创建临时表

hibernate - 删除重复记录时分页结果错误

java - 标准:如何让没有 parent 的 child

java - Wicket 口(Java): How to use wickettester to test if 404 redirected to correct page

java - 在文件中写入和读取整数和字符串

java - 新创建的字符串将在哪里?堆内存还是字符串常量池?

java - twitter4j API - 连接被拒绝

php - 日期存储到数据库时出现错误

Android LocationManager 标准