2014-09-15 3 views
0

В моей таблице у меня есть две колонки: законченные и закрытые. Я хочу выбрать, который показывает все элементы, которые не имеют ОБА значения на 1. Это то, что я пытаюсь, но это не будет показывать предметы, которые имеют одну из них на 1, а другой в 0:Выберите элементы из базы данных, которые не имеют комбинаций значений

select * from `operations` where (`finished` != 1 and `closed` != 1) 

ответ

3
select * from `operations` where (`finished` != 1 or `closed` != 1) 

должен сделать трюк, или в качестве альтернативы

select * from `operations` where !(`finished` = 1 and `closed` = 1) 

Вы можете использовать английское предложение для декодирования. Я имею в виду, что «оба значения в 1» эквивалентны finished=1 and closed=1, тогда «не имеют обоих ...» - это как not, то есть !(finished=1 and closed=1).

+1

Это сделал трюк, спасибо! Я отмечу как разрешенный за 9 минут :) –

1

Предметы, которые не имеют оба значения в 1 будет иметь один или другой, как не- 1.

Следовательно, вам нужно:

select * from `operations` 
where `finished` != 1 or `closed` != 1 

Упрощая значения либо как 1 или 0 увидите вы получите:

finished closed result 
-------- ------ ------ 
     0  0 T 
     0  1 T 
     0  0 T 
     1  1 F 

Это одно чтение вашего вопроса. Другой (хотя и маловероятный) заключается в том, что вы хотите знать, какие строки имеют один значений на 1, но не на другом. Вы можете получить, что с:

select * from `operations` 
where (`finished` != 1 or `closed` != 1) and `finished` != `closed` 

Таблица результатов для этого будет:

finished closed result 
-------- ------ ------ 
     0  0 F 
     0  1 T 
     1  0 T 
     1  1 F 

Ваш оригинальный запрос используется and, где он должен был использовать or (если вы хотите первый результат выше). Это только выбранные строки, где оба значения были не- 1:

finished closed result 
-------- ------ ------ 
     0  0 T 
     0  1 F 
     1  0 F 
     1  1 F 
1

Вы должны использовать SQL OR оператора:

SELECT * FROM `operations` WHERE `finished` != 1 OR `closed` != 1 
Смежные вопросы