SQL-сервер - удалить строки, в которых несколько столбцов имеют нулевое или нулевое значение - PullRequest
4 голосов
/ 11 февраля 2011

Я новичок в БД, и я борюсь с этим.У меня есть существующая таблица со следующими столбцами:

Showroom, Salesperson, Time1, Time2, Time3, Dte

Я пытаюсь удалить все строки в таблице, которые имеют нулевые или нулевые значения во всех 3 временных столбцах.Я попробовал следующее:

DELETE FROM myTable 
WHERE EXISTS(
              SELECT * 
              FROM myTable 
              WHERE (Time1 IS NULL OR Time1 = 0) 
                AND (Time2 IS NULL OR Time2 = 0) 
                AND (Time3 IS NULL OR Time3 = 0)
            )

К счастью, я работаю над тестовой версией базы данных, так как я уничтожил все данные.Любая помощь будет по достоинству оценена.

Ответы [ 5 ]

19 голосов
/ 11 февраля 2011

Запрос должен быть отформатирован следующим образом:

DELETE 
FROM myTable 
WHERE (Time1 IS NULL OR Time1 = 0) 
AND (Time2 IS NULL OR Time2 = 0) 
AND (Time3 IS NULL OR Time3 = 0)

При выполнении DELETE операторов Я думаю это - это всегда лучше сначала создать свой SELECT утверждение, а затем измените его.

SELECT * --If this returns the correct records, simply change to DELETE
FROM myTable 
WHERE (Time1 IS NULL OR Time1 = 0) 
AND (Time2 IS NULL OR Time2 = 0) 
AND (Time3 IS NULL OR Time3 = 0)
3 голосов
/ 11 февраля 2011

То, что вы хотите, это просто;

DELETE myTable
WHERE
  (Time1 IS NULL OR Time1 = 0)
  AND (Time2 IS NULL OR Time2 = 0)
  AND (Time3 IS NULL OR Time3 = 0)
1 голос
/ 11 февраля 2011

Попробуйте вместо этого:

DELETE 
FROM myTable 
WHERE 
  (Time1 IS NULL OR Time1 = 0) AND 
  (Time2 IS NULL OR Time2 = 0) AND 
  (Time3 IS NULL OR Time3 = 0)

Причина, по которой все ваши записи удаляются, заключается в том, что результат EXISTS является истинным, если существует одна запись, которая имеет NULL или 0 для всех трех столбцов.Поскольку в предложении WHERE оператора delete не указывается, какие записи следует удалять, оно по существу совпадает с DELETE FROM myTable WHERE 1=1

1 голос
/ 11 февраля 2011

EXISTS является лишним (как и FROM - он не нужен для DELETE с):

DELETE myTable 
WHERE ((Time1 IS NULL OR Time1 = 0) 
  AND (Time2 IS NULL OR Time2 = 0) 
  AND (Time3 IS NULL OR Time3 = 0))
0 голосов
/ 22 сентября 2015
DELETE myTable WHERE 
(ISNULL(Time1,0) = 0) AND (ISNULL(Time2,0) = 0) AND (ISNULL(Time3,0) = 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...