Skip to content
Advertisement

MySQL: Return a row if all joint table row have the value true

I’ve two tables as following.

Table A
Column Id | Column Name
1         | Test 1
2         | Test 2

The relationship is

Table B
Column Id | Column Delivered | Column TableA_Id
1         | true             | 1
2         | true             | 1
3         | true             | 1
4         | true             | 1
5         | false            | 2
6         | true             | 2
7         | true             | 2

What I want is to return for example for table A the record with id 1 which has a relationship with table B where all the values on table B column Delivered as true.

Advertisement

Answer

You can use group by and having:

select tablea_id
from b
group by tablea_id
having sum( delivered <> 'true' ) = 0;

This doesn’t use table a. If you want all the columns there, you can also use;

select a.*
from a
where not exists (select 1
                  from b 
                  where b.tablea_id = a.id and b.delivered <> 'true'
                 );

The one difference with this query is that it will also return rows in a that have no rows in b at all.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement