SQL Разработчик, присвоение текстовых значений столбцу - PullRequest
0 голосов
/ 11 февраля 2020

Я знаю, что мне здесь не хватает чего-то маленького, но я не могу этого понять. Мне нужно присвоить текст полю выбранных строк.

update exampletable
   set examplecolumn = 'A'
 where column1 LIKE 'Y' 
   and column2 IS NULL 
   and column3 =0 
   and column4 IS NULL;

Любая помощь приветствуется

** edit: я должен был уточнить, что «examplecolumn» не меняется после запуска это. Все записи, которые соответствуют критериям 'where', все еще имеют нулевые значения в столбце example

1 Ответ

0 голосов
/ 11 февраля 2020

В конце концов, оказалось, что реальный вопрос -

, когда я запускаю: select count(*) from exampletable where examplecolumn like 'A'; Я получаю 0 записей. Вот почему я изначально думал, что первый оператор обновления не работает ... есть идеи, почему он будет возвращать 0 записей ??

Это потому, что вы неправильно использовали оператор LIKE и / или предоставили неверную строку поиска , Посмотрите на этот пример:

SQL> select * From dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> select count(*) From dept where dname like 'A';

  COUNT(*)
----------
         0    --> because no row contains exactly letter A in DEPT column

SQL> select count(*) From dept where dname like 'A%';

  COUNT(*)
----------
         1    --> using the wildcard, it found ACCOUNTING

SQL>

Другими словами, ваш запрос искал строку, которая содержит точно буква A. Я предполагаю, что код, который вы разместили в вопросе, является лишь примером, в то время как ваш реальный код обновляет столбец до чего-то еще, немного более длинной строки. Потому что, если бы это было действительно A, запрос вернул бы его:

SQL> insert into dept (deptno, dname) values (1, 'A');

1 row created.

SQL> select count(*) From dept where dname like 'A';

  COUNT(*)
----------
         1   --> now it found DNAME = A

SQL> select count(*) From dept where dname like 'A%';

  COUNT(*)
----------
         2   --> wildcard found both DNAME = A and ACCOUNTING

SQL>
...