2016-07-21 7 views
1

Я стреляя этот запросИ оператор дает неверные результаты в SQL

SELECT * 
FROM Orders WHERE (CustomerID <> 51) AND (ShipperID <> 3); 

и не показывая клиентов с 51 с различными shipperid

Почему? - их любой другой вид И в sql

так что, если я хочу исключить записи с customerid с 51 и идентификатором грузоотправителя с 3, но показать customerid с 51 и грузоотправителем, исключая 3?

+0

Ваш запрос выбирает все данные, которые ** не ** CustomerID 51 и ** не ** ShipperID 3. Пожалуйста, добавьте данные примера и ожидаемый выход –

+0

@juergend но он должен показать записи с идентификатором customerID 51 и ShipperID 2 –

+0

. Тогда почему вы говорите серверу sql для выбора записей 'where customerID <> 51'? – HoneyBadger

ответ

2

Как указано он не показывает клиентов с 51 с различными shipperid Я думаю, что вы, скорее хочу сказать

SELECT * FROM Orders WHERE CustomerID = 51 

так что, если я хочу, чтобы исключить записи с CustomerID с 51 и идентификатор грузоотправителя с 3, но показать customerid с 51 и грузоотправителем, исключая 3?

Затем измените свое состояние, чтобы быть

SELECT * FROM Orders 
WHERE (CustomerID <> 51 AND ShipperID <> 3) 
OR (CustomerID = 51 AND ShipperID <> 3); 
+0

Спасибо @Rahul, что делает работу, но я немного запутался в том, что оператор И теперь –

+0

@omkomawar, у вас на самом деле есть две комбинации состояния и, следовательно, необходимо их разделить были показаны. – Rahul

+0

Да, поэтому, но я думаю, что sql работает с наборами, поэтому он имеет такое странное поведение –

1

Я думаю, что вы хотите OR:

SELECT o.* 
FROM Orders o 
WHERE (CustomerID <> 51) OR (ShipperID <> 3); 

С AND он не вернет ни одной строки с клиентом 51. Ни одно, независимо от грузоотправителя.

+0

, но он должен работать, если первое условие и второе условие должны быть истинными. –

1

я мог бы быть недопонимание вас, когда вы говорите «и это не показывает клиентов с 51», вы желая вернуть идентификатор клиента-х из 51, которые не имеют shipperID 3? Если это так, у вас есть запрос на возврат клиента, который не равен 51 и идентификатор отправителя, который не равен 3, поэтому он не вернет его. Я хотел бы сделать это как этот

SELECT * 
FROM orders 
WHERE customerID = 51 AND shipperid <> 3; 
Смежные вопросы