2015-02-12 2 views
0

У меня проблемы с выполнением инструкции SQL. У меня есть следующий пример-таблица:Заявление SQL с простым соединением

Таблица 1:

ID - | - Name 
1; ABC 
2; DEF 
3; GHI 

Таблица 2:

ID - | - Bool 
1; true 
1; false 
2; true 
3; false 
3; false 

Я хочу присоединиться к таблицам, но показываю только объекты, которые не имеют никакого ложных в таблице 2. Пример: Есть ли ложь и истина в одном объекте, я не хочу иметь Entity в моем результате. Действительно ли это истинно в одном объекте, все в порядке. Моя проблема - сущности, которые имеют true и false в таблице 2 ... Спасибо, что помогли!

ответ

0

Это даст вам все записи, которые имеют ИСТИНУ записи в таблице 2, но не ЛОЖЬ записи:

SELECT ID, Name 
FROM Table1 t1 
WHERE EXISTS 
(
    SELECT NULL 
    FROM Table2 t2 
    WHERE t2.ID = t1.ID 
    AND t2.Bool = 'true' 
) 
AND NOT EXISTS 
(
    SELECT NULL 
    FROM Table2 t2 
    WHERE t2.ID = t1.ID 
    AND t2.Bool = 'false' 
) 
1

Поскольку ваши идентификаторам имеют дубликаты в table2, вам придется сделать некоторые инвентаризации/подсчет:

SELECT table1.ID, table1.Name, 
    SUM(table2.Bool = false) as trues, 
    SUM(table1.Bool = true) as falses 
FROM table1 
INNER JOIN table2 ON table1.ID = table2.ID 
GROUP BY table1.ID 
HAVING falses = 0 
0

у меня нет БД под рукой, но мне интересно, если это будет работать:

select t1.id, t1.name 
from table1 t1 
inner join table2 t2 on t1.id = t2.id 
where t1.id not in (select id from table2 where Bool = 'false') 
0

Если столбец «бо ol 'на таблице 2 действительно является типом данных boolean, который равен 1, если true, и 0, если false, то любой идентификатор, имеющий минимальное значение bool, не равное 0, не должен иметь ложных значений.

Таким образом, вы можете запустить: (см скрипку: http://sqlfiddle.com/#!2/76639/1/0)

select t1.id, t1.name 
    from table_1 t1 
    join (select id from table_2 group by id having min(bool) <> 0) v 
    on t1.id = v.id 
Смежные вопросы