복붙노트

[SQL] 쿼리 "동일하지가"일을하지 않습니다

SQL

쿼리 "동일하지가"일을하지 않습니다

이 같은 매우 간단한 쿼리를 가지고 :

SELECT * FROM `all_conversations` WHERE `deleted_1` != '1';

그리고 내 deleted_1는 기본이 null 또는 일부 사용자 ID,하지만이 쿼리는 항상 나에게 0 행을 반환 어떤 이유로, 나는 또한 <시도>하지만 여전히 운이 무엇을 잘못 될 수 없었 수?

난 내 쿼리를 수정하고 지금은 잘 작동되도록 EDTI 그래서 더 querys를 실행 한 후 난 내 문제 deleted_1 필드의 디폴트 값은 것을 발견, 그것은 NULL했다 :

SELECT *
FROM `all_conversations`
WHERE `deleted_1` != 'NULL'
AND `deleted_1` != 23

해결법

  1. ==============================

    1.

    SELECT * FROM all_conversations WHERE deleted_1 <> 1 OR deleted_1 IS NULL
    

    NULL 값은 특별한 치료가 필요 : http://dev.mysql.com/doc/refman/5.1/en/working-with-null.html

    나는 찬성 다이아몬드 연산자 (<>)를 사용하는 게 좋을 것! = 첫 번째는 유효한 SQL이고, 두 번째는 MySQL의 추가 때문이다.

  2. ==============================

    2.내가 사용 NULL 안전 연산자와 부정에 추천

    내가 사용 NULL 안전 연산자와 부정에 추천

    SELECT * FROM `all_conversations` WHERE NOT(`deleted_1` <=> '1');
    
  3. ==============================

    3.당신이 시도 할 수 있습니다! deleted_1가 null 및 deleted_1 = '1'아닌가요?

    당신이 시도 할 수 있습니다! deleted_1가 null 및 deleted_1 = '1'아닌가요?

    mysql> select 0 is not null and 0 != '1', 1 is not null and 1 != '1', null is not null and null != '1';
    +----------------------------+----------------------------+----------------------------------+
    | 0 is not null and 0 != '1' | 1 is not null and 1 != '1' | null is not null and null != '1' |
    +----------------------------+----------------------------+----------------------------------+
    |                          1 |                          0 |                                0 |
    +----------------------------+----------------------------+----------------------------------+
    

    또는이 deleted_1는 null 또는 deleted_1은 = '1'! :

    mysql> select 0 is null or 0 != '1', 1 is null or 1 != '1', null is null or null != '1';
    +-----------------------+-----------------------+-----------------------------+
    | 0 is null or 0 != '1' | 1 is null or 1 != '1' | null is null or null != '1' |
    +-----------------------+-----------------------+-----------------------------+
    |                     1 |                     0 |                           1 |
    +-----------------------+-----------------------+-----------------------------+
    

    정말 다시 얻을 싶어요에 따라 달라집니다.

  4. ==============================

    4.이것 봐 ... 그것은 당신을 위해 희망 작동합니다

    이것 봐 ... 그것은 당신을 위해 희망 작동합니다

    SELECT *
    FROM `all_conversations`
    WHERE `deleted_1` IS NOT NULL
    AND `deleted_1` <> 23
    
  5. ==============================

    5.당신은 NULL에 대한 테스트 등 =, <, 또는 <> 등의 산술 비교 연산자를 사용할 수 없습니다.

    당신은 NULL에 대한 테스트 등 =, <, 또는 <> 등의 산술 비교 연산자를 사용할 수 없습니다.

    너 자신을 위해이 방법을 설명하기 위해 다음과 같은 쿼리를 시도 :

    mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
    +----------+-----------+----------+----------+
    | 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
    +----------+-----------+----------+----------+
    |     NULL |      NULL |     NULL |     NULL |
    +----------+-----------+----------+----------+
    

    그래서 당신은 말을,

    SELECT * FROM `all_conversations` WHERE `deleted_1` <> '1' and `deleted_1` is null;
    

    your_field IS NULL NULL을 산술 연산자를 사용하여 값을 클럽 캔트 명시 적으로 있기 때문에 그것은 자신의 가치 BOOLEAN있다

  6. ==============================

    6.나는 여러 AND 조건이있는 경우 만 추가 세부 사항을 추가, 위의 대답에 동의 쿼리를 아래와 같이, 당신은 당신이하지를 확인 열 또는의 첫 번째 부분에서 null로 동일을 놓아야 상태에서, 또는 부분은 당신의 상태가 잘못 만들기 때문에 어디

    나는 여러 AND 조건이있는 경우 만 추가 세부 사항을 추가, 위의 대답에 동의 쿼리를 아래와 같이, 당신은 당신이하지를 확인 열 또는의 첫 번째 부분에서 null로 동일을 놓아야 상태에서, 또는 부분은 당신의 상태가 잘못 만들기 때문에 어디

      SELECT ts.*, ct.Name AS CategoryName
    FROM MJ.Tasks  AS ts 
    LEFT JOIN MJ.Lookup_Category AS ct ON ts.CategoryID = ct.ID
    WHERE ts.Status!=1 OR ts.Status IS NULL AND ts.CategoryID = @CategoryID AND ts.UserID = @UserID AND  CAST(ts.EndDate AS DATE) = CAST(@EndDate AS DATE)
    
  7. ==============================

    7.어떻게 하나 주위에 따옴표를 제거하는 방법에 대한?

    어떻게 하나 주위에 따옴표를 제거하는 방법에 대한?

    SELECT * FROM `all_conversations` WHERE `deleted_1` != 1;
    
  8. from https://stackoverflow.com/questions/8994408/query-not-equal-doesnt-work by cc-by-sa and MIT license