我有3个表,其中2个(A
和B
)有多对多关系,它们通过pivot C
表连接。表desc:
A(id, name)
B(id, is_required)
C(a_id, b_id)
我想从A
表中选择记录,来自B
表的相关记录ID在提供的输入中并且符合某些条件。例如:
以免我说我有整数(ids)[1,2,3,4,8,12]
列表,A
中的一条记录有B
的5条相关记录,例如:
A
id name
1 test
-------------
B
id is_required
1 true
2 true
3 false
10 false
16 false
我需要从表A
中选择记录来加入表B
中的相关记录,然后检查 - 是否存在is_required = true
所有必需(B
)记录ID列表([1,2,3,4,8,12]
)然后我们选择此记录,否则不选择。所以应该选择第一个例子,因为B
(1和2)中的所有必需记录都存在于列表中。例如:
A
id name
2 test2
-------------
B
id is_required
1 true
2 true
5 true
6 false
不应选择,因为列表中未提供id为5的必需记录。我怎么能在mysql中实现这个?查询示例:
SELECT A.id, A.name FROM A, B, C
WHERE A.id = C.a_id
AND C.b_id = B.id
如你所见,目前它只加入相关数据,我真的不知道应该如何实现这一点。你能帮帮我吗?
答案 0 :(得分:1)
我相信您需要NOT EXISTS
select A.*
from A
where not exists(
select 1
from C
join B on C.b_id = B.id and
A.id = C.a_id and
is_required = 'false'
)
答案 1 :(得分:1)
您可以使用group by
和having
:
select c.a_id
from c join
b
on c.b_id = b.id and b.is_required = 'true'
group by c.a_id
having count(*) = (select count(*) from b where b.is_required = 'true');